Python中的子进程是否有办法检测父进程是否已经死亡?
答案 0 :(得分:4)
如果您的Python进程在Linux下运行,并且公开了prctl()
系统调用,则可以使用答案here。
这可能导致在父进程终止时将信号发送给子进程。
答案 1 :(得分:1)
您可能会在过程中很早就读取父进程的ID,然后检查,但当然这很容易出现竞争条件。执行生成的父级可能已经立即死亡,甚至在您的进程执行第一条指令之前就已经死亡。
除非你有办法验证给定的PID是否指的是“预期的”父母,否则我认为很难做到可靠。
答案 2 :(得分:1)
我所知道的唯一可靠方法是专门为此目的创建一个管道。孩子将不得不反复尝试从管道读取,优选地以非阻塞方式,或使用选择。当管道不再存在时会出现错误(可能是因为父母的死亡)。
答案 3 :(得分:1)
当您开始执行此操作时假设父级处于活动状态,您可以使用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"
不是很好但是......