2014-08-28 92 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

當進程退出時,它會嘗試終止其所有守護進程的子進程。