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

Eva*_*ark 8 python subprocess

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

Aln*_*tak 5

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

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


Gia*_*olà 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
Run Code Online (Sandbox Code Playgroud)

不是很好但是...


unw*_*ind 1

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

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