回答:
プロセスがセッションIDを共有していると仮定すると(明示的にsetsid()を呼び出していない限り)、pkillを使用してセッションごとにプロセスを強制終了できます。
user@machine:~> ps -o pid,sess,cmd -U user
PID SESS CMD
12804 12804 -bash
12916 12804 ps -o pid,sess,cmd -U user
user@machine:~> sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ sh
sh-3.00$ ps -o pid,sess,cmd -U user
PID SESS CMD
12804 12804 -bash
12920 12804 sh
12921 12804 sh
12922 12804 sh
12924 12804 sh
12926 12804 sh
12928 12804 sh
12937 12804 ps -o pid,sess,cmd -U user
sh-3.00$
別の端末からの場合:
pkill -9 -s 12804
その後、すべてが一気に死にます。
同様にプロセスグループごとに強制終了することもできますが、これは、関連するプロセスのチェーンではなく、すべて親より1レベル下にある多くの子にとってより便利です。
通常、応答するクライアントはsigtermを受け取り、それ自体をオフにして、フォークされたすべての子プロセスを終了します。一方、クライアントが応答しない場合、通常の終了信号はおそらく応答を引き起こしません。
そのため、SIGKILLの送信に進みます。SIGKILLは、システム自体にそのプロセスを停止するように指示します。I/ Oを待機するなど、プロセスが割り込み不可能なスリープ状態にある場合を除き、ほとんどの場合実行できます。入力または類似。
その場合、SIGKILLでさえプロセスに何もしなくなります。子プロセスはおそらく同様の遅延状態になります。
親プロセスはうまく終了するかもしれないが、子プロセスは殺すことができない境界ケースがあります。その後、ゾンビプロセスが発生します。ゾンビプロセスは、父親がなくなったためクリーンアップできませんが、何にも応答しません。それらを取り除く唯一の方法は再起動です。ただし、ほとんどの場合、使用しようとしたソケットがすでに枯れている間にPIDを取得するだけなので、ほとんど無害です。
Firefoxのプロセスツリーを強制終了したい場合、上記のコマンド「pkill -9 -s firefox」で強制終了できますか
pkill -9
よりも強力なようですpkill
。