0

如果我在文件this_script.py像這樣的代碼:殺死調用shell進程的Python腳本是否也會終止shell進程?

import subprocess 
subprocess.Popen(["python", "another_script.py"]) 

,我叫

python this_script.py 

,並在運行時殺死進程,將它殺死子進程?

編輯:我測試了這一點,如果this_script被殺死,子進程繼續運行。有沒有辦法確保後臺進程在主要Python進程中死掉?

+1

爲什麼不試試看? –

+0

在不同的平臺上,答案可能會有所不同,所以@TymoteuszPaul建議,你應該自己嘗試一下,以確定它在你的平臺上的行爲。 –

+0

我測試了它,在主進程被終止時繼續運行(這是在CentOS上)。有沒有辦法確保子流程在主流程死亡時死亡? – Andrew

回答

2

是的,你可以抓到KeyboardInterrupt,SystemExit並確保kill的子過程。

from subprocess import Popen 

try: 
    p = Popen(args) 
    p.wait() # wait for the process to finish 
except KeyboardInterrupt, SystemExit: 
    p.kill() 
    raise 
+0

這段代碼的問題是'Popen()'異步運行。換句話說,主要的Python進程將立即退出,並且您現在已經在後臺運行了子進程。要修復它,你可以添加'p.wait()'。在'try'塊中,或者將'..'除外'改成'finally' ...不確定哪個OP要... – Carpetsmoker

+0

啊,是的。你是對的。我會添加它。 – MaxNoe