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

Jos*_*son 7 python posix

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

小智 11

您也可以将os.kill与信号0一起使用,而不是os.waitpid:

>>> os.kill(8861, 0)
>>> os.kill(12765, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 3] No such process
>>> 
Run Code Online (Sandbox Code Playgroud)

编辑:更广泛:

import errno
import os

def pid_exists(pid):
    try:
        os.kill(pid, 0)
    except OSError, e:
        return e.errno == errno.EPERM
    else:
        return True
Run Code Online (Sandbox Code Playgroud)

这在我的Linux机箱上工作正常.我还没有确认"信号0"实际上是Posix,但它总是适用于我尝试过的每个Unix变种.

  • 在http://www.opengroup.org/onlinepubs/009695399/functions/kill.html中记录了向一个过程发送信号0. (3认同)
  • 我不认为它是完全有缺陷的.它告诉您是否存在进程,这就是要求的进程.(错误可以让你区分"不存在"和"你不被允许".)非传统模块当然可以破坏任何东西. (2认同)

Sil*_*ost 0

os.waitpid()可能有帮助:

try:
    os.waitpid(pid, 0)
except OSError:
    running = False
else:
    running = True
Run Code Online (Sandbox Code Playgroud)