子进程发送SIGTERM时的Python段错误

时间:2013-01-15 12:34:41

标签: python qt segmentation-fault subprocess pyside

我在python中生成一个子进程,如下所示:

proc = subprocess.Popen(
  [process, arg1, arg2],
  env= current_env, cwd=exec_path, stdout=subprocess.PIPE)

当我向子进程发送一个SIGTERM(来自shell,而不是python)时,我的问题就出现了。

如果我使用proc.read()来读取proc的stdout的结果,那么我最终会死锁(正如预期的那样,因为使用了PIPE)但python不会崩溃。

但是,如果我使用proc.communicate()然后使用python segfaults。据我了解,无论孩子做什么,这都不应该以任何方式影响父进程(python)!

我想要做的是致电proc.communicate(),然后检查proc.returncode,这应该表明子流程有任何问题。

我正在使用Python 2.7.3

谢谢!

修改 另一件需要注意的是,这是在QThread(PySide.QtCore.QThread)中运行。

EDIT2:

最小例子:

该示例在QThread上下文之外正确运行,因此问题似乎与它有关。

process.py:

class A(QThread):
  def run(self):
    pp = subprocess.Popen(["./loop.sh"], stdout=subprocess.PIPE)
    output = pp.communicate()
    print('Now send SIGTERM to loop.sh and watch me crash')

loop.sh

#!/bin/bash
while true; do : ; done

0 个答案:

没有答案