Вместо os.waitpid вы также можете использовать os.kill с сигналом 0:
>>> 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
>>>
Редактировать: более подробно:
import errno
import os
def pid_exists(pid):
try:
os.kill(pid, 0)
except OSError, e:
return e.errno == errno.EPERM
else:
return True
Это прекрасно работает на моей Linux-коробке. Я не проверял, что «signal 0» на самом деле Posix, но он всегда работал на каждом варианте Unix, который я пробовал.