Linux上的Popen新进程组

时间:2013-08-15 15:10:37

标签: python linux

我使用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时的新进程组)。

1 个答案:

答案 0 :(得分:1)

bash在等待前台子进程完成时不处理信号。这就是发送它SIGINT没有做任何事情的原因。此行为与进程组无关。

有几种方法可让您的孩子处理您的SIGINT

  1. 使用Shell=True生成新流程时,请尝试将exec添加到命令行的前面,以便将bash替换为您的子流程。
  2. 在使用Shell=True生成新进程时,使用& wait %-附加命令行。这将导致bash在等待子进程完成时对信号做出反应。但它不会将信号传递给您的子进程。
  3. 使用Shell=False并指定子可执行文件的完整路径。