Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python linux上的Popen新进程组_Python_Linux - Fatal编程技术网

Python linux上的Popen新进程组

Python 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的默认行为似乎是我

我正在用Popen(python2.7,Shell=True)生成一些进程,然后向它们发送SIGINT。看起来进程组负责人实际上是Python进程,因此将SIGINT发送到Popen返回的PID(即bash的PID)没有任何作用

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


实际上,我正在升级一些使用Python2.6运行的旧脚本,而Python2.6的默认行为似乎是我想要的(即,当我执行Popen时,会有一个新的进程组)。

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

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

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

  • 这篇文章给了你秘方。@tdelaney哦,谢谢。这似乎奏效了。所以,我想它会创建一个新会话。在Python3中有一个标志用于此。谢谢。解决方案1似乎对我没有任何帮助。解决方案2杀死了外壳,但留下了其他进程,如您所说。我更喜欢使用Shell=True,因为在这一点上更容易。