プロセスとサブプロセスを終了するには?

プロセスとサブプロセスを終了するには?

私は尋ねた 一つの質問Pythonのサブプロセスモジュールから複数行のメッセージを取得する方法を学びます。

問題は、テスト中にgnuchessプロセスを実行しているPythonプロセスを終了する必要があることです。コマンドラインで^ cを使用すると、Pythonプロセスは終了するように見えますが、GNUプロセスは終了しません。

グヌチェスを殺すためにpidを得た補助グレブ・グヌチェスそして走るキル-9 PID。 Pythonとgnuchessプロセスを終了する他の方法はありますか?

答え1

プログラムが協力する場合、標準的なアプローチがあります。kill -- -4242が親プロセスの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>

関連情報