繁体   English   中英

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

[英]Child process detecting the parent process' death in Python

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

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

这会导致在父进程终止时向子进程发送信号。

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

不是很好但是...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM