GNU/Linux >> Linux の 問題 >  >> Linux

プロセスツリーを考慮した SIGKILL SIGTERM の違い

信号でそれを制御することはできません。 waitpid() を呼び出すことにより、その親プロセスのみがそれを制御できます または SIGCHLD のシグナルハンドラを設定する . SIGCHLD を参照 そして SA_NOCLDWAIT sigaction(2) で 詳細についてはマンページをご覧ください。

また、子スレッドがどうなるかは、Linux カーネルのバージョンによって異なります。 2.6 の POSIX スレッドでは、メイン スレッドを強制終了すると、他のスレッドが正常に終了するはずです。 2.4 LinuxThreads では、各スレッドは実際には個別のプロセスであり、SIGKILL SIGTERM に対して、ルート スレッドに他のスレッドにシャットダウンを指示する機会を与えません。


ルート プロセス (親プロセス) を強制終了すると、ゾンビの子ではなく、孤児の子が作成されます。プロセスの親を強制終了すると、孤児の子が作成され、カーネルは init を孤児の親にします。 init は orphan が死ぬまで待ってから、wait を使用してクリーンアップすることになっています。

プロセス (その親ではない) が終了し、その親がプロセス テーブルからその終了ステータスを取得しない場合、ゾンビの子が作成されます。

定義上、ゾンビの親プロセスを強制終了すると、ゾンビの子自体が死ぬため、孤児を残すことを心配しているように思えます。

孤児を殺すには、SIGKILL と同等の kill -9 を使用します。

Linux でものを殺すためのより詳細なチュートリアルは次のとおりです:http://riccomini.name/posts/linux/2012-09-25-kill-subprocesses-linux-bash/


Linux
  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. Kill、Pkill、Killallの違いは?

  3. SnatとMasqueradeの違いは?

  1. fork()、vfork()、exec()、clone()の違い

  2. 子プロセスが親の SIGINT を受け取る

  3. 親プロセスの死を検出する

  1. ログインシェルと非ログインシェルの違いは?

  2. ゾンビプロセスを強制終了する方法

  3. cgroup と名前空間の違い