首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在linux上的python中,如何在给定的时间内使用%cpu杀死特定的进程?

在linux上的python中,如何在给定的时间内使用%cpu杀死特定的进程?
EN

Stack Overflow用户
提问于 2013-08-27 08:04:24
回答 4查看 2.8K关注 0票数 4

我在linux上的python中有这个脚本,它在本地部署vnc,在这个vnc屏幕上做一些图形化的工作,并杀死vnc。有时工作完成后,名为gnome面板的进程挂起,并保持100%的cpu使用率。然后,我需要通过putty登录并手动关闭所有这些进程(有时会有很多进程)。我想在我的python脚本完成其工作时添加几行代码,这不仅会杀死vnc (它已经这么做了),而且如果它在给定的时间内消耗了一定数量的cpu,它也会杀死gnome面板。我不能简单地杀死所有的gnome面板,因为其中一些面板运行良好(我同时部署了4个vnc屏幕)。

所以在python中我需要这样的条件:

如果进程名为gnome面板,占用80%以上的cpu并运行超过1分钟,则终止进程id

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-27 09:59:46

您可以使用psutil库获得进程的cpu百分比,并最终杀死它们。这个库可以在、Solaris、FreeBSD和OS ( 32位和64位)上使用从2.4到3.3(和PyPy)的python。

下列(未经测试的)代码应该可以执行您想做的事情:

代码语言:javascript
复制
gnome_panel_procs = []
for process in psutil.process_iter():
    # I assume the gnome-panel processes correctly set their name
    # eventually you could use process.cmdline instead
    if process.name == 'gnome-panel':
        gnome_panel_procs.append(process)

for proc in gnome_panel_procs:
    for _ in range(60):
        # check cpu percentage over 1 second
        if proc.get_cpu_percent(1) < 80 or not proc.is_running():
            # less than 80% of cpu or process terminated
            break
    else:
        # process used 80% of cpu for over 1 minute
        proc.kill()

注意:调用is_running()可以防止pid重用问题,这可能发生在建议的其他解决方案中(尽管可能性很小)。

如果您想检查进程是否在一分钟前启动,并且在这一刻使用了80%以上的CPU,那么可以使用一些更简单的方法:

代码语言:javascript
复制
import time
import psutil

for proc in psutil.process_iter():
    if proc.name == 'gnome-panel' and time.time() - proc.create_time > 1:
        if proc.get_cpu_percent() > 80:
            proc.kill()

这将杀死任何gnome-panel进程,即使它在最后一分钟没有使用太多的CPU,但仅在最后几秒钟内。

票数 2
EN

Stack Overflow用户

发布于 2013-08-27 09:03:01

代码语言:javascript
复制
import os

os.system(' ps aux| grep gnome-panel | awk \'{if($3>80) print $2}\' |xargs kill -9 ') 
票数 1
EN

Stack Overflow用户

发布于 2013-08-27 08:25:17

ps aux \ grep‘gnome-面板’\\ awk '{if ($3>80)打印$2}‘\ xargs’\xargs -9

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18460147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档