假设我有一个 PID,例如 555。我想查看该 pid 是否正在运行或已完成。我可以检查 /proc/ 但我无法在我的生产环境中访问它。除了像打开管道到“ps”这样的黑客行为之外,最好的方法是什么?
问问题
622 次
2 回答
11
使用os.kill()
信号号为 0 的函数。如果进程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的有效性。
于 2010-12-29T03:11:17.290 回答
2
正如 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 下运行,则不需要这样做。
于 2011-04-04T12:36:36.350 回答