我有这个脚本在Linux上的Python本地部署vnc,在这个VNC屏幕上做一些graphics工作,并杀死VNC。 有时在作业完成后,名为gnome-panel的进程挂起并保持100%的cpu使用率。 然后,我需要通过puttylogin并手动杀死所有这些进程(实际上其中有很多)。 我想添加几行到我的python脚本完成它的工作,这不仅会杀死vnc(它已经),而且杀死gnome面板,如果它消耗一定的cpu时间超过一定的时间。 我不能简单地杀死所有的GNOME面板,因为他们中的一些工作正常(同时部署4 VNC屏幕)。
所以我需要在python中的这个条件:
如果进程名称为gnome-panel并占用80%以上的cpu,并运行超过1分钟,则kill进程号
谢谢!
Linux开机后会获得系统时间
如何在使用/ usr / bin / time时忽略程序的输出?
Gameboy模拟器播放比预期的更快
在Windows批处理中使用创builddate和时间重命名文件
MSG :: time比timeGetTime晚
在逻辑上操作时间,尊重夏令时
以编程方式计算Windows上的进程的开始时间
确定什么是在Linux上的用户空间绑定的可执行文件中造成太多系统时间
Windows XP的本地时间夏令时问题
时间.bat文件运行时间
您可以使用psutil库来获取进程的cpu百分比,并最终杀死它们。 这个库适用于从2.4到3.3(和PyPy)的Python,在Linux,Windows,Solaris,FreeBSD和OS X上都是32位和64位。
以下(未经测试)的代码应该做你想要的:
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使用率并不高,而只是在最后几秒钟。
import os os.system(' ps aux| grep gnome-panel | awk '{if($3>80) print $2}' |xargs kill -9 ')
ps aux | grep'gnome-panel'| awk'{if($ 3> 80)print $ 2}'| xargs kill -9
看起来这已经在这里实现了ps aux的结果
ps = subprocess.Popen(['ps','aux'],stdout=subprocess.PIPE).communicate()[0] processes = ps.split('n') # this specifies the number of splits,so the splitted lines # will have (nfields+1) elements nfields = len(processes[0].split()) - 1 processes = [row.split(None,nfields) for row in processes[1:]]
一个示例过程是:
['greg','6359','0.0','0.1','16956','8868','pts/3','S+','01:40','0:00','python']
然后你可以通过遍历所有的过程来完成
for process in processes: if "gnome-terminal" in process[-1] and float(process[2]) > 0.8 and int(process[-2].split(":")[-1]) > 1: subprocess.call(["kill","-9",process[0]])
我敢肯定,虽然这样做有点不太好
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。