次のように、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