psutil.process_iter()未返回所有运行中的进程

5 投票
2 回答
11783 浏览
提问于 2025-04-30 08:51

我在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),只是你不能对所有进程进行“查询”。

撰写回答