我在linux上的python中有这个脚本,它在本地部署vnc,在这个vnc屏幕上做一些图形化的工作,并杀死vnc。有时工作完成后,名为gnome面板的进程挂起,并保持100%的cpu使用率。然后,我需要通过putty登录并手动关闭所有这些进程(有时会有很多进程)。我想在我的python脚本完成其工作时添加几行代码,这不仅会杀死vnc (它已经这么做了),而且如果它在给定的时间内消耗了一定数量的cpu,它也会杀死gnome面板。我不能简单地杀死所有的gnome面板,因为其中一些面板运行良好(我同时部署了4个vnc屏幕)。
所以在python中我需要这样的条件:
如果进程名为gnome面板,占用80%以上的cpu并运行超过1分钟,则终止进程id。
谢谢!
发布于 2013-08-27 09:59:46
您可以使用psutil库获得进程的cpu百分比,并最终杀死它们。这个库可以在、Solaris、FreeBSD和OS ( 32位和64位)上使用从2.4到3.3(和PyPy)的python。
下列(未经测试的)代码应该可以执行您想做的事情:
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,那么可以使用一些更简单的方法:
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,但仅在最后几秒钟内。
发布于 2013-08-27 09:03:01
import os
os.system(' ps aux| grep gnome-panel | awk \'{if($3>80) print $2}\' |xargs kill -9 ') 发布于 2013-08-27 08:25:17
ps aux \ grep‘gnome-面板’\\ awk '{if ($3>80)打印$2}‘\ xargs’\xargs -9
https://stackoverflow.com/questions/18460147
复制相似问题