Python多处理。您如何从孩子那里获得父母的身份?

bli*_*ile 1 python linux pid python-multiprocessing

我正在使用多处理模块编写一个应用程序(Linux),该模块产生多个子级。当孩子去世时,我可以使用以下类似方法从父母那里检测到它:

process = multiprocessing.Process(...)
if process.is_alive():
  print "Process died"
Run Code Online (Sandbox Code Playgroud)

但是,我也希望能够从孩子那里检测出父母是否还活着,如果有人去了并杀死-9的父母进程来进行清理。

从上面的示例中,我可以使用以下任一方法获取父ID:

process._parent_pid
Run Code Online (Sandbox Code Playgroud)

要么:

os.getppid()
Run Code Online (Sandbox Code Playgroud)

但是我找不到一种简单的方法来获取流程状态。我宁愿不使用子过程向grep / regex ps列表中写一些东西。有没有更清洁的方法?

mha*_*wke 5

您可以将父级的进程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()
Run Code Online (Sandbox Code Playgroud)