Python多处理。您如何从孩子那里获取家长的状态?
我正在使用多处理模块编写一个应用程序(Linux),它产生了几个子系统。当一个孩子死亡时,我可以通过以下方式从父母那里检测到: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
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中死亡,则容器将退出。