📅  最后修改于: 2023-12-03 15:04:15.411000             🧑  作者: Mango
在Python中,有时我们需要通过发送SIGINT信号来停止正在运行的子进程。本文将介绍如何在Python中实现这一目标。
Python的subprocess模块允许我们在Python程序中运行外部命令,并与该命令进行交互。在本文中,我们将使用该模块来启动子进程并发送SIGINT信号。
首先,我们需要导入subprocess模块。
import subprocess
接下来,我们需要定义将要运行的命令。在本例中,我们将使用ping
命令。
command = ["ping", "www.google.com"]
这将在子进程中运行ping www.google.com
命令。
现在,我们需要使用subprocess.Popen()
函数启动子进程,并将其存储在一个变量中。我们还将指定SIGINT
信号的句柄函数。
def interrupt_handler(signum, frame):
proc.send_signal(signal.SIGINT)
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
signal.signal(signal.SIGINT, interrupt_handler)
这将启动子进程,并在其输出的情况下接收子进程的输出。我们还定义了一个interrupt_handler()
函数,该函数将发送SIGINT信号给子进程。
现在,我们可以等待子进程完成。如果我们需要立即停止子进程,我们只需要发送SIGINT信号。
try:
outs, errs = proc.communicate(timeout=15)
print(outs.decode())
except subprocess.TimeoutExpired:
proc.send_signal(signal.SIGINT)
outs, errs = proc.communicate()
print(outs.decode())
在这个例子中,我们使用了timeout
参数,以便在一定时间内等待子进程完成。如果超时时间到了而子进程仍未完成,则将发送SIGINT信号以停止该进程。
通过使用Python的subprocess模块和信号处理技巧,我们可以在Python程序中非常方便地发送SIGINT信号到任意正在运行的子进程中。