Python 多处理。如何从 child 获取 parent 的状态?
Python multiprocessing. How do you get the status of the parent from the child?
我正在使用多处理模块编写一个应用程序 (Linux),它产生了几个 children。当 child 死亡时,我可以使用类似以下的方法从 parent 检测到它:
process = multiprocessing.Process(...)
if process.is_alive():
print "Process died"
但是,我还希望能够从 children 中检测到 parent 是否还活着,以便在有人去杀死 -9 的 [=30] 时进行清理=] 进程.
从上面的示例中,我可以通过以下任一方式获取 parent id:
process._parent_pid
或:
os.getppid()
但我找不到获取进程状态的简单方法。我宁愿不使用子进程向 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()
我正在使用多处理模块编写一个应用程序 (Linux),它产生了几个 children。当 child 死亡时,我可以使用类似以下的方法从 parent 检测到它:
process = multiprocessing.Process(...)
if process.is_alive():
print "Process died"
但是,我还希望能够从 children 中检测到 parent 是否还活着,以便在有人去杀死 -9 的 [=30] 时进行清理=] 进程.
从上面的示例中,我可以通过以下任一方式获取 parent id:
process._parent_pid
或:
os.getppid()
但我找不到获取进程状态的简单方法。我宁愿不使用子进程向 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()