Python 多处理。如何从 child 获取 parent 的状态?

Python multiprocessing. How do you get the status of the parent from the child?

我正在使用多处理模块编写一个应用程序 (Linux),它产生了几个 children。当 child 死亡时,我可以使用类似以下的方法从 parent 检测到它:

process = multiprocessing.Process(...)
if process.is_alive():
  print "Process died"

但是,我还希望能够从 children 中检测到 parent 是否还活着,以便在有人去杀死 -9 的 [=30] 时进行清理=] 进程.

从上面的示例中,我可以通过以下任一方式获取 parent id:

process._parent_pid

或:

os.getppid()

但我找不到获取进程状态的简单方法。我宁愿不使用子进程向 grep/regex ps 列表写入内容。有更清洁的方法吗?

您可以将父进程 ID 与 1 进行比较;如果它是 1 那么你可以推断出父进程已经终止,因为子进程现在有 init 进程(pid 1)作为父进程。

import os
import time
from multiprocessing import Process

def subprocess():
    while True:
        ppid = os.getppid()
        print "Parent process id:", ppid
        if ppid == 1:
            print "Parent process has terminated"
            break
        time.sleep(1)

p = Process(target=subprocess)
p.start()