我正在使用多处理模块编写一个应用程序(Linux),它会生成几个孩子。当孩子死亡时,我可以使用以下内容从父母那里检测出来:
process = multiprocessing.Process(...)
if process.is_alive():
print "Process died"
但是,我也希望能够从孩子们身上发现父母是否还活着,如果有人去处理并且杀死-9是父进程,则要处理清理。
从上面的示例中,我可以使用以下任一方式获取父ID:
process._parent_pid
或者:
os.getppid()
但我找不到一个简单的方法来获得该过程的状态。我宁愿不使用子进程向grep / regex ps列表写一些东西。有更清洁的方式吗?
答案 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()