在Python进程被终止时杀死子进程?
我正在写一个Python程序,这个程序会启动一个子进程(用Popen)。
我会读取这个子进程的输出,然后进行一些筛选,最后把结果写回主进程的输出。
但是,当我用Ctrl-C来终止主进程时,子进程却还在继续运行。请问我该如何同时结束子进程呢?因为这个子进程可能会运行很长时间。
背景信息:我一次只启动一个子进程,并且在筛选它的输出。用户可能会决定中断程序,想尝试其他事情。
我对Python还很陌生,而且我是在Windows系统上操作,所以请多多指教。
3 个回答
0
你可以使用Python的 atexit
模块。
比如说:
import atexit
def killSubprocess():
mySubprocess.kill()
atexit.register(killSubprocess)
0
subprocess.Popen 对象有两个方法,分别是 kill 和 terminate(这两个方法发送给进程的信号不同)。
signal.signal 让你可以设置信号处理器,在这些处理器里你可以调用子进程的 kill 方法。
5
Windows系统没有信号这个概念,所以你不能使用信号模块。不过,当你按下Ctrl-C时,还是可以捕捉到KeyboardInterrupt这个异常。
你可以试试下面这样的代码:
import subprocess
try:
child = subprocess.Popen(blah)
child.wait()
except KeyboardInterrupt:
child.terminate()