我正在编写一个激活子进程的python程序(使用Popen)。 我正在阅读子进程的stdout,进行一些过滤,并写入 主要过程的标准。
当我终止主进程(cntl-C)时,子进程继续运行。 我如何杀死子进程?子流程很可能会运行很长时间。
上下文: 我一次只启动一个子进程,我正在过滤它的stdout。 用户可能决定打断以尝试其他操作。
我是python的新手,我正在使用Windows,所以请保持温和。
答案 0 :(得分:5)
Windows没有信号,因此您无法使用信号模块。但是,当按下Ctrl-C时,您仍然可以捕获KeyboardInterrupt异常。
这样的事情应该让你前进:
import subprocess
try:
child = subprocess.Popen(blah)
child.wait()
except KeyboardInterrupt:
child.terminate()
答案 1 :(得分:0)
subprocess.Popen对象带有kill和terminate方法(与发送给进程的信号不同)。
signal.signal允许你安装信号处理程序,你可以在其中调用孩子的kill方法。
答案 2 :(得分:0)
您可以使用python atexit
模块。
例如:
import atexit
def killSubprocess():
mySubprocess.kill()
atexit.register(killSubprocess)