如何在 python 中杀死使用 subprocess.call 调用的子进程? [复制]
Posted
技术标签:
【中文标题】如何在 python 中杀死使用 subprocess.call 调用的子进程? [复制]【英文标题】:How to kill a subprocess called using subprocess.call in python? [duplicate] 【发布时间】:2016-11-16 13:22:30 【问题描述】:我正在使用
调用命令subprocess.call(cmd, shell=True)
命令不会自动终止。怎么杀?
【问题讨论】:
【参考方案1】:我认为您正在寻找的是subprocess.terminate()
。如果您使用Popen
而不是call
,则它是非阻塞的,您将能够恢复执行。当然,如果你在之后调用terminate
,它会在它做任何事情之前终止。
Documentation here
【讨论】:
【参考方案2】:由于subprocess.call
等待命令完成,因此您无法以编程方式将其杀死。你唯一的办法是通过操作系统特定的命令手动杀死它,比如kill
。
如果您想以编程方式终止进程,您需要使用subprocess.Popen
启动该进程,然后使用terminate
启动它。下面是一个例子:
import time, subprocess
t1 = time.time()
p = subprocess.Popen('sleep 1', shell=True)
p.terminate()
p.wait()
t2 = time.time()
print(t2 - t1)
这个脚本大约需要.002s
来执行(如果没有终止睡眠命令,则大约需要 1 秒)。
【讨论】:
以上是关于如何在 python 中杀死使用 subprocess.call 调用的子进程? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 asyncio python 中使用 subprocess 模块限制并发进程的数量
如何使用在后端执行的长时间运行的 C/C++ 代码杀死 python 解释器?