目前我只探索了两种方法,一种是利用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