当python进程被杀死时杀死子进程?
我正在编写一个启动子进程的 python 程序(使用 Popen)。 我正在读取子进程的标准输出,进行一些过滤,然后写入 主进程的标准输出。
当我终止主进程(cntl-C)时,子进程继续运行。 我如何也杀死子进程?子进程可能会运行很长时间。
语境: 我一次只启动一个子进程,我正在过滤它的标准输出。 用户可能决定中断以尝试其他事情。
我是 python 新手,我正在使用 windows,所以请温柔一点。
I am writing a python program that lauches a subprocess (using Popen).
I am reading stdout of the subprocess, doing some filtering, and writing to
stdout of main process.
When I kill the main process (cntl-C) the subprocess keeps running.
How do I kill the subprocess too? The subprocess is likey to run a long time.
Context:
I'm launching only one subprocess at a time, I'm filtering its stdout.
The user might decide to interrupt to try something else.
I'm new to python and I'm using windows, so please be gentle.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Windows没有信号,所以不能使用信号模块。但是,当按下 Ctrl-C 时,您仍然可以捕获 KeyboardInterrupt 异常。
像这样的事情应该让你继续:
Windows doesn't have signals, so you can't use the signal module. However, you can still catch the KeyboardInterrupt exception when Ctrl-C is pressed.
Something like this should get you going:
subprocess.Popen 对象带有一个kill 和一个终止方法(不同之处在于发送给进程的信号)。
signal.signal 允许您安装信号处理程序,您可以在其中调用子进程的 Kill 方法。
subprocess.Popen objects come with a kill and a terminate method (differs in which signal you send to the process).
signal.signal allows you install signal handlers, in which you can call the child's kill method.
您可以使用 python
atexit
模块。例如:
You can use python
atexit
module.For example: