2014-08-28 89 views
11

我从一个Python脚本产卵5个不同的工艺死亡,就像这样:杀子进程父是在Python

p = multiprocessing.Process(target=some_method,args=(arg,)) 
p.start() 

我的问题是,当,不知何故父进程(主脚本)得到死亡,子进程继续运行。

当父母死亡时,是否有办法杀死像这样产生的子进程?

编辑: 我想这一点:

p = multiprocessing.Process(target=client.start,args=(self.query_interval,)) 
p.start() 
atexit.register(p.terminate) 

但这似乎并不奏效

+3

重复? http://stackoverflow.com/questions/14128410/killing-child-process-when-parent-crashes-in-python – theAlse 2014-08-28 06:40:46

+0

我已经通过这篇文章,它具体谈论'popen'和子流程 – 2014-08-28 06:42:07

+0

如何父进程被杀害? – Korem 2014-08-28 07:14:52

回答

3

孩子还没有通知其父母死亡的,它只适用于其他方式。

但是,当一个进程死亡时,其所有文件描述符都关闭。如果管道的另一端选择读取,则会通知管道的另一端。

所以你的父母可以在产卵过程之前创建一个管道(或者事实上,你可以将stdin设置为管道),并且孩子可以选择这个管道进行读取。当父母关闭时,它会报告准备好阅读。这要求您的孩子运行邮件循环,或者至少定期拨打电话进行选择。如果你不想这样做,你需要一些经理流程去做,但是当那个人被杀时,事情会再次破裂。

12

我已经遇到了同样的问题我自己,我已经得到了以下解决方案:

调用p.start()之前,你可以设置p.daemon=True。然后如这里所述python.org multiprocessing

当进程退出时,它会尝试终止其所有守护进程的子进程。