私は尋ねた 一つの質問Pythonのサブプロセスモジュールから複数行のメッセージを取得する方法を学びます。
問題は、テスト中にgnuchessプロセスを実行しているPythonプロセスを終了する必要があることです。コマンドラインで^ cを使用すると、Pythonプロセスは終了するように見えますが、GNUプロセスは終了しません。
グヌチェスを殺すためにpidを得た補助グレブ・グヌチェスそして走るキル-9 PID。 Pythonとgnuchessプロセスを終了する他の方法はありますか?
答え1
プログラムが協力する場合、標準的なアプローチがあります。kill -- -42
42が親プロセスのpidの場合は実行してください。すべてのプロセスに信号を送信します。プロセスグループプロセス42によって起動されます(pidの前のマイナス記号はプロセスグループを表します)。
通常、シェルプロンプトでPythonスクリプトを実行して分岐するだけで、両方のgnuchess
プロセスは同じプロセスグループに残る必要があります。しかし、Ctrl+はフォアグラウンドプロセスグループ全体にC送信されるため、そうではありません。SIGINT
Gnuchessは自分がセッションリーダーになるか(しかしなぜそうするのかわかりません)、それ自体のプロセスグループにいるかもしれません。 。デュアルフォークはおそらく避けることができますが、コードを見ないと方法を話すことはできません。
プロセスのpidを見つけるためのかなり安定しており、POSIX準拠の方法は次のとおりですgnuchess
。
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
特定のUNIXバリアントには、これを達成するためのより良い方法があります(例えばpgrep
。
答え2
努力する:
pkill <processname>