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列表中写一些东西。有没有更清洁的方法?
您可以将父级的进程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)