如何在 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 调用的子进程? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何杀死正在运行的python进程? [复制]

如何在 asyncio python 中使用 subprocess 模块限制并发进程的数量

如何使用在后端执行的长时间运行的 C/C++ 代码杀死 python 解释器?

如何使用子进程模块杀死(或避免)僵尸进程

如何在框架关闭时终止或杀死python GUI应用程序中的子线程

Python:当父进程死亡时如何杀死子进程?