ホームページ >運用・保守 >Linuxの運用と保守 >Linux でゾンビが発生する原因は何ですか?
Linux がゾンビ (ゾンビ プロセス) を生成する理由は、親プロセスが子プロセスを生成した後、子プロセスが親プロセスよりも先に終了しますが、親プロセスは、親プロセスが送信した終了信号を処理しません。子プロセスが子プロセスになるため、子プロセスはゾンビプロセスと呼ばれますが、このときルートIDでもプロセスを強制終了することができず、子プロセスの親プロセスを強制終了することで解決できます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
原因:
ゾンビ プロセス、英語名はゾンビ プロセスです。その名の通り、デッドプロセスです。では、ゾンビ プロセスの起源は何でしょうか?
ゾンビ プロセスが生成される理由は、親プロセスが子プロセスを作成した後、子プロセスが親プロセスよりも先に終了しますが、親プロセスは子プロセスを終了しないためです。子プロセスから送信されたデータをさまざまな理由で処理し、終了シグナルが発生すると、この子プロセスはゾンビプロセスになります。
これはいわゆるゾンビ (ゾンビ プロセス) であり、fork()/execve() プロセス中、子プロセスが終了しても親プロセスがまだ存在しているものとみなされ、親プロセスはプロセスは fork() の前に SIGCHLD シグナルをインストールしていません。処理関数が waitpid() を呼び出して子プロセスの終了を待ち、シグナルを明示的に無視しない場合、子プロセスはゾンビ プロセスになり、正常に終了できません。今回は、root として kill -9 を実行しても、ゾンビ プロセスを強制終了できません。解決策は、ゾンビ プロセスの親プロセスを強制終了することです (ゾンビ プロセスの親プロセスが存在する必要があります)。ゾンビ プロセスは「孤立プロセス」になり、プロセス 1 番の init によって採用されます。Init は常に責任を負います。ゾンビプロセスをクリーンアップしています。
ゾンビ プロセスとは、終了した親プロセスを指し、そのプロセスが終了した後にそのプロセスを受け入れるプロセスがない場合、そのプロセスはゾンビ プロセスになります。(ゾンビ) プロセス
解決策:
(1) 親プロセスは、wait や waitpid などの関数を使用して子プロセスが終了するのを待機します。これにより、親プロセスがハングします。
wait() または waitpid() システムコールが実行されると、子プロセスは終了直後にプロセステーブルのデータを親プロセスに返しますが、このときシステムはエントリを即座に削除します。ポイント。この場合、消滅プロセスは生成されません。
(2) 親プロセスが非常にビジーな場合は、シグナル関数を使用して SIGCHLD のハンドラーをインストールできます。子プロセスが終了すると、親プロセスはシグナルを受信し、ハンドラー内で wait を呼び出してリサイクルすることができます。
(3) 親プロセスが子プロセスの終了時期を気にしない場合は、シグナル (SIGCLD、SIG_IGN) またはシグナル (SIGCHLD、SIG_IGN) を使用して、終了には関心がないことをカーネルに通知できます。子プロセスの終了後、カーネルはリサイクルされ、親プロセスにシグナルを送信しなくなります
(4) 2 回フォークすると、親プロセスは子プロセスをフォークし、動作を継続します。 、子プロセスは孫プロセスをフォークして終了し、その後、孫プロセスは init によって引き継がれ、孫プロセスが終了した後、init はそれをリサイクルします。ただし、子プロセスのリサイクルは自分で行う必要があります。
推奨学習: Linux ビデオ チュートリアル
以上がLinux でゾンビが発生する原因は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。