別のスレッドで開始したサブプロセスを殺すとき、通信パイプをシャットダウンすることが可能になるのだろうか。私がcommunicate()を呼び出さなければ、kill()は期待どおりに動作し、5秒ではなく1秒後にプロセスを終了します。pythonサブプロセスPopenで開始されたプロセスを強制終了するときにstdout-pipeを閉じるにはどうしたらいいですか?
私は同様の問題hereの議論を見つけましたが、私は本当の答えを得ませんでした。私は、いずれかのパイプを閉じるためにまたは明示的に(この例では「スリープ」である)サブサブプロセスを殺し、パイプのブロックを解除することを殺すことができなければならないと仮定する。
私はまた、SOに答え、彼女を見つけることを試みたが、私は直接私の知る限り、この問題に対処していないthisとthisとthisを、見出しました(?)。
だから私はやりたい事は、第二のスレッドでコマンドを実行し、そのすべての出力を得るが、私はそう望む時に即座にそれを殺すことができることができるようにすることです。私はファイルやテールを経由して似たようなことができますが、これを行うにはもっと良い方法があると思いますか?あなたがPythonの超粗粒度の並行処理の犠牲者かもしれように見えます
#!/bin/bash
echo "sleeping five"
sleep 5
echo "slept five"
出力
$ time python poc.py
process: sleeping five
real 0m5.053s
user 0m0.044s
sys 0m0.000s
、 '。/ ascript.sh'は死ぬが、その中に'睡眠は5'ません。興味深いことに、 '。/ ascript.sh'が消滅した直後にPythonが戻ってこないということです。 –