3

我正在使用 Popen(Python 2.7,Shell=True)生成一些进程,然后向它们发送 SIGINT。看来进程组组长实际上是 Python 进程,所以向 Popen 返回的 PID(即 bash 的 PID)发送 SIGINT 并没有任何作用。

那么,有没有办法让 Popen 创建一个新的进程组呢?我可以看到有一个名为 subprocess.CREATE_NEW_PROCESS_GROUP 的标志,但它仅适用于 Windows。

我实际上正在升级一些与 Python2.6 一起运行的遗留脚本,对于 Python2.6,默认行为似乎是我想要的(即,当我执行 Popen 时,一个新的进程组)。

4

1 回答 1

2

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

有几个选项可以让您的子进程接收您的SIGINT

  1. 在生成新进程时,请Shell=True尝试exec在命令行前面添加,以便 bash 被您的子进程替换。
  2. 当生成一个新进程时,Shell=True在命令行中附加& wait %-. 这将导致 bash 在等待您的子进程完成时对信号做出反应。但它不会将信号转发给您的子进程。
  3. 使用Shell=False并指定子可执行文件的完整路径。
于 2013-08-15T15:21:51.060 回答