psutil.process_iter()不返回所有正在运行的进程

时间:2014-10-29 09:52:31

标签: python psutil

我在Windows 8.1上的python 64位上使用psutil 2.1.2。我正在使用psutil.process_iter()迭代正在运行的进程以获取特定进程的详细信息。由于某种原因,即使它显示在任务管理器和Process Explorer

中,我也无法获得该过程
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

我检查了proc名称,这绝不是我正在寻找的过程。 我看不到的进程示例是svchost.exe

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

对于某些(实际上很多)进程,proc.open_files()将导致AccessDenied异常,这可能就是您没有“看到”所有进程的原因。任务管理器和Process Explorer显示的信息比psutil更多,因为它们具有较少的权限限制(请参阅:它们可以从流程中“提取”更多信息,而不会遇到“拒绝访问”错误)。通过使用psutil,您可以看到所有进程(PID),但只有您无法“查询”所有进程。

答案 1 :(得分:1)

这个错误https://github.com/giampaolo/psutil/issues/599可能是导致问题的原因。现在修好了。