Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理。您如何从孩子那里获取家长的状态?_Python_Linux_Pid_Python Multiprocessing - Fatal编程技术网

Python多处理。您如何从孩子那里获取家长的状态?

Python多处理。您如何从孩子那里获取家长的状态?,python,linux,pid,python-multiprocessing,Python,Linux,Pid,Python Multiprocessing,我正在使用多处理模块编写一个应用程序(Linux),它产生了几个子系统。当一个孩子死亡时,我可以通过以下方式从父母那里检测到: process = multiprocessing.Process(...) if process.is_alive(): print "Process died" 然而,我也希望能够从孩子身上检测出父母是否还活着,如果有人去杀了他们,我希望能够处理清理工作——9是父母的过程 从上面的示例中,我可以通过以下任一方式获得父id: process._parent_pi

我正在使用多处理模块编写一个应用程序(Linux),它产生了几个子系统。当一个孩子死亡时,我可以通过以下方式从父母那里检测到:

process = multiprocessing.Process(...)
if process.is_alive():
  print "Process died"
然而,我也希望能够从孩子身上检测出父母是否还活着,如果有人去杀了他们,我希望能够处理清理工作——9是父母的过程

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

process._parent_pid
或:


但是我找不到一个简单的方法来获得过程的状态。我不希望使用subprocess在ps列表中为grep/regex写一些东西。有更干净的方法吗?

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

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

似乎这种方法在docker容器中不起作用,因为根进程(本例中为父进程)始终为PID 1。另一方面,如果PID为1的进程在docker中死亡,则容器将退出。似乎这种方法在docker容器中不起作用,因为根进程(本例中为父进程)总是PID为1。另一方面,如果PID为1的进程在docker中死亡,则容器将退出。