终止正在运行的子进程调用

Tho*_*s O 12 python multithreading subprocess

我正在用subprocessPython 启动一个程序.

在某些情况下,程序可能会冻结.这是我无法控制的.我从命令行中唯一可以做的就是CtrlEsc快速杀死程序.

有没有办法模仿这个subprocess?我正在使用subprocess.Popen(cmd, shell=True)启动该程序.

Aya*_*Aya 22

嗯,有一对夫妇返回的对象上的方法subprocess.Popen()可能是有用的:Popen.terminate()Popen.kill(),其发送SIGTERMSIGKILL分别.

例如...

import subprocess
import time

process = subprocess.Popen(cmd, shell=True)
time.sleep(5)
process.terminate()
Run Code Online (Sandbox Code Playgroud)

...将在五秒钟后终止该过程.

或者您可以使用os.kill()发送其他信号,例如SIGINT模拟CTRL-C,...

import subprocess
import time
import os
import signal

process = subprocess.Popen(cmd, shell=True)
time.sleep(5)
os.kill(process.pid, signal.SIGINT)
Run Code Online (Sandbox Code Playgroud)

  • 在Windows上`kill = terminate`并且信号的工作方式不同. (2认同)

but*_*tch 17

p = subprocess.Popen("echo 'foo' && sleep 60 && echo 'bar'", shell=True)
p.kill()
Run Code Online (Sandbox Code Playgroud)

查看subprocess模块上的文档以获取更多信息:http://docs.python.org/2/library/subprocess.html

  • 应该尝试在彻底杀死它之前终止. (2认同)
  • 尝试终止然后杀死,子进程仍然运行! (2认同)