Python linux上的Popen新进程组
我正在用Popen(python2.7,Shell=True)生成一些进程,然后向它们发送SIGINT。看起来进程组负责人实际上是Python进程,因此将SIGINT发送到Popen返回的PID(即bash的PID)没有任何作用 那么,有没有办法让Popen创建一个新的流程组?我可以看到有一个名为subprocess.CREATE_NEW_PROCESS_GROUP的标志,但它仅适用于WindowsPython linux上的Popen新进程组,python,linux,Python,Linux,我正在用Popen(python2.7,Shell=True)生成一些进程,然后向它们发送SIGINT。看起来进程组负责人实际上是Python进程,因此将SIGINT发送到Popen返回的PID(即bash的PID)没有任何作用 那么,有没有办法让Popen创建一个新的流程组?我可以看到有一个名为subprocess.CREATE_NEW_PROCESS_GROUP的标志,但它仅适用于Windows 实际上,我正在升级一些使用Python2.6运行的旧脚本,而Python2.6的默认行为似乎是我
实际上,我正在升级一些使用Python2.6运行的旧脚本,而Python2.6的默认行为似乎是我想要的(即,当我执行Popen时,会有一个新的进程组)。bash在等待前台子进程完成时不会处理信号。这就是为什么发送它
SIGINT
没有任何作用。这种行为与进程组无关
有几个选项可以让您的子进程接收您的SIGINT
:
Shell=True
生成新进程时,请尝试将exec
前置到命令行的前面,以便用子进程替换bashShell=True生成新进程时
使用&wait%-
追加命令行。这将导致bash在等待子进程完成时对信号做出反应。但它不会将信号转发给您的子进程Shell=False
并指定子可执行文件的完整路径这篇文章给了你秘方。@tdelaney哦,谢谢。这似乎奏效了。所以,我想它会创建一个新会话。在Python3中有一个标志用于此。谢谢。解决方案1似乎对我没有任何帮助。解决方案2杀死了外壳,但留下了其他进程,如您所说。我更喜欢使用Shell=True,因为在这一点上更容易。