回答:
プログラムが連携する場合、標準的な方法があります。実行kill -- -42
42は、親プロセスのPIDです。これにより、プロセス42が先頭にあるプロセスグループ内のすべてのプロセスにシグナルが送信されます(pidの前のマイナス記号はプロセスグループを意味します)。
通常、Pythonスクリプトをシェルプロンプトから実行し、単純にforkするgnuchess
場合、2つのプロセスは同じプロセスグループに残る必要があります。Ctrl+ はフォアグラウンドプロセスグループ全体にC送信SIGINT
されるため、これは当てはまりません。
Gnuchessは、それ自体がセッションリーダーになったため(しかし、なぜこれを行うのかはわかりません)、またはそれを二重にフォークしたため(pythonがgnuchessをフォークするシェルをフォークする)、独自のプロセスグループに属している可能性があります。ダブルフォークはおそらく回避可能ですが、コードを確認せずにその方法を説明することはできません。
プロセスのPIDを見つける合理的な信頼性とPOSIX準拠の方法gnuchess
は
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
特定のUNIXバリアントには、これを実現するためのより良い方法があるかもしれませんpgrep
。
pkill
名前でプロセスを殺すために、あなたのようにps aux | grep gnuchess
とkill -9 PID
だけになることができますpkill -9 gnuchess