私は 質問 Pythonのサブプロセスモジュールから複数行のメッセージを取得する方法を知りたいと尋ねました。
問題は、テスト中にgnuchessプロセスを実行するpythonプロセスを強制終了しなければならないことです。コマンドラインで^ cを使用すると、pythonプロセスが強制終了されるようですが、gnuprocessは強制終了されません。
Gnuchessを殺すために、ps auxでpidを取得します| grep gnuchessを実行してkill -9 PIDを実行します。 pythonとgnuchessプロセスの両方を終了する他の方法はありますか?
プログラムが連携している場合、標準的な方法があります。 kill -- -42
を実行します。ここで、42は親プロセスのPIDです。これにより、プロセス42(pidがプロセスを意味する前のマイナス記号)によって導かれる プロセスグループ 内のすべてのプロセスに信号が送信されます。グループ)。
通常、シェルプロンプトからpythonスクリプトを実行し、それが単にgnuchess
をフォークする場合、2つのプロセスは同じプロセスグループにとどまるはずです。しかし、これはそうではないようです。なぜなら Ctrl+CSIGINT
をフォアグラウンドプロセスグループ全体に送信します。
Gnuchessは、それ自体がセッションリーダーになったため(ただし、なぜこれを行うのかわかりません)、またはダブルフォークしたため(pythonはgnuchessをフォークするシェルをフォークします)、独自のプロセスグループに属している可能性があります。ダブルフォークはおそらく避けられますが、コードを見ずにその方法を説明することはできません。
gnuchess
プロセスのpidを見つけるための合理的に信頼できるPOSIX準拠の方法は次のとおりです。
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
特定のUNIXバリアントは、pgrep
のように、これを実現するより良い方法を持っている場合があります。
試してみてください:
pkill <processname>