次のように、Python でサブプロセスを生成します。
proc = subprocess.Popen(
  [process, arg1, arg2],
  env= current_env, cwd=exec_path, stdout=subprocess.PIPE)
サブプロセスにSIGTERMを送信すると(Pythonではなくシェルから)問題が発生します。
proc.read()の stdoutの結果を読み取るために使用procすると、(PIPE の使用により予想どおり) デッドロック状態になりますが、python はクラッシュしません。
ただし、使用するとproc.communicate()、python segfaults. 私が理解しているように、子が何をしても、これは親プロセス (python) に影響を与えるべきではありません!
私がやりたいことは、 を呼び出して、子プロセスの問題を示すものをproc.communicate()確認することです。proc.returncode
私はPython 2.7.3を使用しています
ありがとう!
編集: 注意すべきもう 1 つのことは、これが QThread (PySide.QtCore.QThread) で実行されることです。
EDIT2:
最小限の例:
この例は QThread コンテキストの外で正しく実行されるため、問題はそれに関連しているようです。
プロセス.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