psutil.process_iter()未返回所有运行中的进程
我在Windows 8.1的64位Python上使用psutil 2.1.2。我用psutil.process_iter()来遍历正在运行的进程,以获取某个特定进程的详细信息。但不知为什么,我找不到这个进程,尽管它在任务管理器和进程查看器中都能看到。
for proc in psutil.process_iter():
try:
if proc.name() == 'svchost.exe': # patch for debugging
pass #script never gets here
opened_files = proc.open_files()
opened_files = [opened_file[0] for opened_file in opened_files]
if file_path in opened_files:
processes.append(proc)
except (psutil.AccessDenied, psutil.NoSuchProcess):
pass
我检查了进程名称,但从来没有找到我想要的那个进程。比如,我找不到的一个进程是svchost.exe。
谢谢大家的帮助!
2 个回答
1
可能这个错误 https://github.com/giampaolo/psutil/issues/599 是导致问题的原因。现在已经修复了。
4
对于某些(实际上是很多)进程,使用 proc.open_files() 会导致一个访问被拒绝的错误,所以可能这就是你看不到所有进程的原因。任务管理器和进程查看器能显示比 psutil 更多的信息,因为它们的权限限制较少(也就是说,它们可以从进程中“提取”更多的信息,而不会遇到“访问被拒绝”的错误)。不过,使用 psutil 你还是能看到 所有 进程(进程ID),只是你不能对所有进程进行“查询”。