【发布时间】:2021-05-24 22:06:46
【问题描述】:
我正在尝试使用 Python 向通过subprocess.Popen 创建的进程发送 SIGINT 信号。我需要运行 test.bash 并在新窗口中打开它,然后等待 4 秒,发送 SIGINT(相当于使用 Ctrl-C)所以我使用以下代码:
command = "xterm -e bash test.bash"
process = subprocess.Popen(command.split())
time.sleep(4)
os.kill(process.pid, signal.SIGINT)
我设置了“test.bash”来捕获 SIGINT 信号,并运行清理命令。这在我直接从命令行运行“test.bash”时有效。但是当我在 Python 中通过xterm -e bash test.bash 发送它时,它会立即完全终止进程并且根本不处理 SIGINT 信号。
我已经尝试了一些我在网上阅读的关于杀死进程组的内容,但这也没有做任何事情。我尝试用process.send_signal(signal.SIGINT) 替换os.kill(process.pid, signal.SIGINT) 无济于事。有什么想法吗?
【问题讨论】:
-
您将信号发送到
xterm进程。没有直接的方法可以获取bash进程的PID。 -
@Barmar 有没有间接的方法来获取
bash进程的PID? -
您可以让
test.bash将其 PID 写入文件并使用它。 -
你可以像thispointer.com/…这样查找
pid
标签: python linux bash subprocess