子进程在Python中检测父进程的死亡

时间:2009-04-17 07:56:42

标签: python subprocess

Python中的子进程是否有办法检测父进程是否已经死亡?

4 个答案:

答案 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"

不是很好但是......