0

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

0 に答える 0