11

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

4

4 回答 4

5

如果你的 Python 进程在 Linux 下运行,并且prctl()暴露了系统调用,你可以在这里使用答案。

当父进程终止时,这可能会导致向子进程发送信号。

于 2009-04-17T08:02:38.927 回答
4

假设在您开始执行此操作时父级还活着,您可以使用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"

不是很好但是...

于 2010-11-19T20:58:53.943 回答
2

我所知道的唯一可靠的方法是专门为此目的创建一个管道。孩子将不得不反复尝试从管道中读取,最好以非阻塞方式或使用 select。当管道不再存在时(可能是由于父母去世),它会报错。

于 2009-10-05T10:32:39.707 回答
1

您可能会在进程的早期就读取父进程的 ID,然后进行检查,但这当然容易出现竞争条件。进行生成的父级可能立即死亡,甚至在您的进程开始执行其第一条指令之前。

除非您有办法验证给定的 PID 是否指的是“预期的”父级,否则我认为很难做到可靠。

于 2009-04-17T08:01:56.387 回答