目前我只探索了两种方法,一种是利用psutil(一个Python Package),另一种只针对Windows系统,利用它自带的tasklist命令。
一. 利用Psutil获取系统的Running Process信息
注意我把Running特意用红色标出,这是提醒大家利用psutil只能获取当前系统正在运行的进程。如果是一个程序卡死了(Not Responding),则psutil无法获取到它的信息,我猜测此时这个进程是出于挂起的状态。
Psutil的Github首页上有简单的使用文档:https://github.com/giampaolo/psutil 文档:http://pythonhosted.org/psutil/
二. 利用Windows系统中的tasklist命令
这时候Python只是一个用来处理文本信息的工具而已。
使用 tasklist /V 可以获取进程的详细信息。

下面是一个例子,检测Firefox的状态,如果它卡死了,则干掉他。
import os
import time
def kill_firefox_if_not_responding(time_interval):
while(True):
p = os.popen("tasklist /V")
for line in p.readlines():
line = line.strip()
if line.lower().find("firefox") != -1:
if line.lower().find("responding") != -1:
firefox_pid = line.split()[1]
os.popen("taskkill /F /T /PID %s" %(firefox_pid, ))
print("firefox closed at: " + time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
time.sleep(time_interval)
if __name__ == "__main__":
kill_firefox_if_not_responding(120)
Leave a Reply