我使用Popen(Python 2.7,Shell = True)生成一些进程,然后向它们发送SIGINT。似乎进程组负责人实际上是Python进程,因此将SIGINT发送到由Popen返回的PID,这是bash的PID,没有做任何事情。
那么,有没有办法让Popen创建一个新的流程组?我可以看到有一个名为subprocess.CREATE_NEW_PROCESS_GROUP的标志,但它仅适用于Windows。
我实际上正在升级一些使用Python2.6运行的遗留脚本,而且对于Python2.6而言,默认行为是我想要的(即当我执行Popen时的新进程组)。
答案 0 :(得分:1)
bash在等待前台子进程完成时不处理信号。这就是发送它SIGINT
没有做任何事情的原因。此行为与进程组无关。
有几种方法可让您的孩子处理您的SIGINT
Shell=True
生成新流程时,请尝试将exec
添加到命令行的前面,以便将bash替换为您的子流程。Shell=True
生成新进程时,使用& wait %-
附加命令行。这将导致bash在等待子进程完成时对信号做出反应。但它不会将信号传递给您的子进程。Shell=False
并指定子可执行文件的完整路径。