在Python中,如果不使用/ proc文件系统,我该如何判断给定的PID是否正在运行?

假设我有一个PID,比如555.我想看看这个PID是正在运行还是已经完成。 我可以检查/ proc /但我没有访问到我的生产环境。 什么是最好的方法来做到这一点,缺乏像打开“ps”pipe道的东西?

使用信号编号为0的os.kill()函数。如果进程pid存在,则调用将成功,否则会引发OSError异常:

 try: os.kill(pid, 0) print("process exists") except OSError: print("process does not exist") 

我的系统上kill(2)的文档说:

kill ()函数将由sig给出的信号发送给pid ,一个进程或一组进程。 Sig可能是sigaction(2)中指定的信号之一,也可能是0,在这种情况下会执行错误检查,但实际上没有信号发送。 这可以用来检查pid的有效性。

使用Greg提到的os.kill() ,但是意识到kill系统调用不会测试进程是否存在,而是可以发送kill到进程。 一种失败模式是如果进程不存在,而另一种是你没有权限杀死它。 要区分,你必须检查异常:

 try: os.kill(pid, 0) print 'Process exists and we can kill it' except OSError, e: if e.errno == 1: print 'Process exists, but we cannot kill it' else: raise 

如果你知道你总是有权限终止正在检查的进程,比如说你正在以root身份运行,或者已知进程在检查进程的同一个UID下运行,那么这不是必需的。