【发布时间】:2018-02-27 10:52:04
【问题描述】:
我在中断subprocess.Popen 时遇到问题这是设置:
我有一个 Tkinter gui,它正在使用 Popen 运行另一个 python 脚本。这个内部脚本(我们称之为running script)正在运行一个shell shell 脚本,该脚本使用Popen 执行一段C++ 代码,因此层次结构如下所示:
GUI
\running_script
\shell-script
\c++
running_script 的工作原理是,如果它接收到中断,它会将 SIGINT 发送到shell-script。如果我用我的一段 C++ 代码和 running_script 单独运行 shell_script 并执行 CRTL+C 一切都会像魅力一样。但是,如果我使用将running_script 作为 Popen 运行的 GUI 来执行此操作,则将 SIGINT 发送到running_script 正确接收它并将中断信号发送到shell-script,而不是终止内部进程(作为 c++ 代码), shell-script 自行终止,C++ 进程继续运行,因为它是在后台运行的,但事实并非如此。当我执行ps -xaf 时,树看起来像这样:
GUI
\running_script
\shell-script <defunct>
c++
所以重申一下,当我在没有 GUI 的情况下运行它时,它就像一个魅力,但使用 GUI 时,它的行为如上所述。我也尝试发送shell-command SIGTERM 而不是 SIGINT,结果是一样的。
【问题讨论】:
标签: python python-2.7 tkinter popen