gpt4 book ai didi

python - 确定(Windows)上是否存在 PID 的快速方法?

转载 作者:太空狗 更新时间:2023-10-29 20:40:14 27 4
gpt4 key购买 nike

我意识到“快速”有点主观,所以我会结合一些上下文进行解释。我正在开发一个名为 psutil 的 Python 模块用于以跨平台方式读取进程信息。其中一个函数是 pid_exists(pid) 函数,用于确定 PID 是否在当前进程列表中。

现在我正在使用 EnumProcesses() 以显而易见的方式进行此操作拉出进程列表,然后遍历列表并查找 PID。然而,一些简单的基准测试表明这比基于 UNIX 的平台(Linux、OS X、FreeBSD)上的 pid_exists 函数要慢得多,我们使用 kill(pid, 0) 和 0 信号来判断 PID 是否存在。额外的测试表明,几乎所有时间都是 EnumProcesses。

有谁知道比使用 EnumProcesses 更快的方法来确定 PID 是否存在?我试过 OpenProcess()并检查打开不存在的进程的错误,但事实证明这比遍历 EnumProcesses 列表慢 4 倍以上,所以也没有了。还有其他(更好的)建议吗?

注意:这是一个 Python 库,旨在避免第三方库依赖项,如 pywin32 扩展。我需要一个比我们当前代码更快的解决方案,并且不依赖于 pywin32 或标准 Python 发行版中不存在的其他模块。

编辑:澄清一下 - 我们很清楚读取进程信息中存在固有的竞争条件。如果进程在数据收集过程中消失或我们遇到其他问题,我们会提出异常。 pid_exists() 函数无意取代正确的错误处理。

更新:显然我之前的基准测试存在缺陷 - 我用 C 编写了一些简单的测试应用程序,EnumProcesses 始终运行得较慢,而 OpenProcess(与 GetProcessExitCode 结合使用,以防 PID 有效但进程有停止)实际上更快而不是更慢。

最佳答案

OpenProcess可以告诉你 w/o 枚举所有。我不知道有多快。

编辑:请注意,您还需要 GetExitCodeProcess即使您从 OpenProcess 获得句柄,也要验证进程的状态.

关于python - 确定(Windows)上是否存在 PID 的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com