子进程如何检测父进程死亡(Python)
有没有办法让Python中的子进程知道它的父进程是否已经死掉了?
4 个回答
3
我知道的唯一可靠的方法就是专门创建一个管道。子进程需要不断尝试从这个管道中读取数据,最好是以非阻塞的方式进行,或者使用选择(select)功能。当管道不再存在时(可能是因为父进程已经结束),子进程会收到一个错误提示。
5
假设你在开始这个操作的时候,父进程是活着的。你可以通过一个忙碌的循环来检查它是否还活着,方法是使用psutil这个库:
import psutil, os, time
me = psutil.Process(os.getpid())
while 1:
if me.parent() is not None:
# still alive
time.sleep(0.1)
continue
else:
print("my parent is gone")
break
虽然这样做不是特别优雅,但是...
5
如果你的Python程序在Linux系统上运行,并且可以使用prctl()
这个系统调用,你可以参考这个回答 这里。
这样做可以在父进程结束时,给子进程发送一个信号。