簡體   English   中英

殺死python進程時殺死子進程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM