[英]kill subprocess when python process is killed?
我正在編寫一個激活子進程的python程序(使用Popen)。 我正在讀取子進程的stdout,進行一些過濾,並寫入主進程的stdout。
當我殺死主進程(cntl-C)時,子進程繼續運行。 我如何殺死子進程? 子進程很可能運行很長時間。
上下文:我一次只啟動一個子進程,我正在過濾它的stdout。 用戶可能決定中斷以嘗試其他操作。
我是python的新手,我正在使用Windows,所以請保持溫和。
Windows沒有信號,因此您無法使用信號模塊。 但是,按下Ctrl-C時仍然可以捕獲KeyboardInterrupt異常。
這樣的事情會讓你前進:
import subprocess
try:
child = subprocess.Popen(blah)
child.wait()
except KeyboardInterrupt:
child.terminate()
subprocess.Popen對象帶有kill和terminate方法(與發送給進程的信號不同)。
signal.signal允許你安裝信號處理程序,你可以在其中調用孩子的kill方法。
你可以使用python atexit
模塊。
例如:
import atexit
def killSubprocess():
mySubprocess.kill()
atexit.register(killSubprocess)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.