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

时间:2015-02-19 02:24:56

标签: python linux pid python-multiprocessing

我正在使用多处理模块编写一个应用程序(Linux),它会生成几个孩子。当孩子死亡时,我可以使用以下内容从父母那里检测出来:

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

但是,我也希望能够从孩子们身上发现父母是否还活着,如果有人去处理并且杀死-9是父进程,则要处理清理。

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

process._parent_pid

或者:

os.getppid()

但我找不到一个简单的方法来获得该过程的状态。我宁愿不使用子进程向grep / regex ps列表写一些东西。有更清洁的方式吗?

1 个答案:

答案 0 :(得分:4)

您可以将父级的流程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()