Python psutil进程未运行、重复使用或已死亡或僵死
psutil.process\u iter()包括什么?因为它是一个缓存实例,所以它是只包含当时正在运行的进程,还是包含所有内容并将其当前状态留给用户验证?我的代码:Python psutil进程未运行、重复使用或已死亡或僵死,python,process,psutil,Python,Process,Psutil,psutil.process\u iter()包括什么?因为它是一个缓存实例,所以它是只包含当时正在运行的进程,还是包含所有内容并将其当前状态留给用户验证?我的代码: for _process in psutil.process_iter(): try: new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid', 'status']) except psutil.NoSuchProcess:
for _process in psutil.process_iter():
try:
new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid', 'status'])
except psutil.NoSuchProcess:
continue
这里过滤的所有状态是什么?我需要自己验证什么呢?:
返回一个迭代器,为所有正在运行的生成一个进程类实例
本地计算机上的进程。每个实例只创建一次,然后缓存到一个内部表中,该表在每次生成元素时更新。强调是我的
其中“running”由定义,返回僵尸进程的True
.is\u running()
可以安全使用,即使进程已结束且其pid已被重用
我的理解是,\u process.is\u running()
在psutil.process\u iter()
产生它的那一刻是正确的。原则上,在\u进程之前。由于dict
返回信息,可能会发生以下几种情况:
\u进程.是否正在运行()
为真,pid
和状态
有意义psutil.NoSuchProcess
异常)或过时(如果缓存)\u进程
方法可能会错误地返回新进程的信息.is\u running()
使用多个进程属性,因此它应该在重用pid
时检测到这种情况pid
,因此p.3不应该频繁出现。psutil.process\u iter()
迭代系统中所有正在运行的进程ZombieProcess
错误主要出现在MacOS中,解决方法可以是在异常情况下使用psutil以外的处理它。ZombieProcess:
for _process in psutil.process_iter():
try:
new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid', 'status'])
except psutil.NoSuchProcess:
continue
except psutil.ZombieProcess:
continue
谢谢你的标签。添加一个标记需要1500个信誉度。这是正确的。
进程
类通过其PID绑定到进程。因此,PID可以随时消失或重新使用[1]。这就是为什么每次处理它时,您都应该尝试/除了捕获至少NoSuchProcess
异常(还包括ZombieProcess
)之外。[1] 必须指出的是,除非流程
实例是旧的,否则重复使用PID的风险非常低,或者可能为0。