2012-09-27 85 views
3

我有幾個python腳本是通過subprocess.Popen()級聯打開自己。python終止/殺子進程組

(我稱之爲script1.py誰使script2.py的POPEN誰使script3.py的POPEN等)

有什麼辦法終止/從SCRIPT1殺script1.py的所有子進程。 py PID。

os.killpg()不起作用。

感謝您的幫助。

+0

您是否嘗試過使用script2Proc = subprocess.Popen(「python script2.py」)並殺死它,script2Proc.kill() – Tadgh

+0

確定它沒有死過? – lolopop

回答

3

通過在script2.py的執行的開始改變GID,子序貫工藝屬於SCRIPT2 GID。所以用script2的pid從script1.py調用killpg()可以很好地實現。

+0

你能解釋一下怎麼做?謝謝 – PierreE

+1

subprocess.Popen有一個非常有用的論點preexec_fn,我很高興地發現。通過os.setpgrp,script2PID = subprocess.Popen([「script2.py」],shell = False,pre exec_fn = os.setpgrp),這將使我的第二個腳本成爲所有後續進程的領導者,即改變他的GID隨後的叉子將繼承。通過這種方式,我將能夠通過os.killpg(script2PID)殺死script2進程組 – oho

0

在script1.py中,殺掉打開到script2.py的子進程。

Popen.terminate() 

或 Popen.kill()

相關問題