psutil.process_iter()包含什么?因为,它是一个缓存的实例,它是否只包含当时正在运行的进程,或者它包含所有内容并使其当前状态为用户验证?我的代码:
for _process in psutil.process_iter():
try:
new_proc = _process.as_dict(attrs=['cpu_times', 'name', 'pid', 'status'])
except psutil.NoSuchProcess:
continue
这里过滤了所有状态?我需要自己验证什么呢?
答案 0 :(得分:0)
The docs for psutil.process_iter()
say:
返回一个迭代器,为所有运行生成一个Process类实例 本地机器上的进程。每个实例只创建一次,然后缓存到内部表中,每次生成元素时都会更新。 强调是我的
其中"跑步"由.is_running()
method定义,为僵尸进程返回True
。即使进程已经消失并且其pid被重用,.is_running()
也可以安全使用。
我的理解是_process.is_running()
在psutil.process_iter()
产生它的时候是真的。原则上,在_process.as_dict
返回信息之前,可能会发生以下几种情况:
_process.is_running()
为真,pid
和status
有意义psutil.NoSuchProcess
例外)或过时(如果缓存)_process
方法可能会错误地返回 new 进程的信息。 .is_running()
使用多个流程属性,因此它应该在重用pid
时检测到这种情况。通常情况下,操作系统不会立即重用pid
,因此p.3不应经常发生。
答案 1 :(得分:0)
psutil.process_iter()
遍历系统中所有正在运行的进程。 ZombieProcess
错误通常在MacOS中出现,解决方法可能是在except 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