相关疑难解决方法(0)

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

我意识到"快"有点主观所以我会用一些背景来解释.我正在研究一个名为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库,旨在避免第三方lib依赖项,如pywin32扩展.我需要一个比我们当前代码更快的解决方案,它不依赖于pywin32或标准Python发行版中没有的其他模块.

编辑:澄清 - 我们很清楚,阅读过程中存在固有的竞争条件.如果在数据收集过程中进程消失或者遇到其他问题,我们会引发异常.pid_exists()函数无意替换正确的错误处理.

更新:显然我早期的基准测试存在缺陷 - 我用C语言编写了一些简单的测试应用程序,EnumProcesses的编写速度一直较慢,OpenProcess(与PID有效但过程已经停止时一起使用GetProcessExitCode)实际上要快得多而且速度慢.

c python winapi pid

8
推荐指数
2
解决办法
6483
查看次数

查看Python中是否存在具有给定pid的进程的最简单方法是什么?

在POSIX系统中,我想查看给定的进程(例如PID 4356)是否正在运行.如果我能获得有关该过程的元数据会更好.

python posix

7
推荐指数
2
解决办法
1753
查看次数

如何从python应用程序获取Mac上运行进程的完整列表

我想获取Mac上正在运行的进程列表,类似于你从'ps -ea'获得的进程

我曾尝试  os.popen("PS -ea"),但这只是列出的过程,想必那些由所属的外壳拥有的一小部分.

我尝试过的其他选择是

'sh -c /bin/ps -ea'
'bash -c /bin/ps -ea'
'csh -c /bin/ps -ea'
Running as root via sudo
data = subprocess.Popen(['ps','ea'], stdout=subprocess.PIPE).stdout.readlines()
Run Code Online (Sandbox Code Playgroud)

还有哪些方法可以为我提供完整的流程信息列表?

这是一个wx python应用程序,用于监视特定进程并发现它们何时死亡.

python macos process

2
推荐指数
1
解决办法
5286
查看次数

标签 统计

python ×3

c ×1

macos ×1

pid ×1

posix ×1

process ×1

winapi ×1