ゾンビプロセスとは
ゾンビプロセスは、実行が終了したにもかかわらずプロセステーブルレコードを保持するコンピュータープログラムのインスタンスです。 このような機能しないプロセスは、子プロセスを処理する方法が原因で、通常Unix®およびその他の同様のオペレーティングシステムに関連付けられています。 子プロセスの実行が終了すると、通常、親はプロセステーブルから子プロセスを削除します。 通常、killコマンドを使用してゾンビプロセスを直接削除することはできませんが、オペレーターが子シグナル(SIGCHLD)通知を使用する場合は、親を削除することができます。 これに失敗すると、親を殺すことでゾンビプロセスが間接的に削除される可能性があります。
ゾンビプロセスは、生きている死者を指す比phor的な説明用語です。 Unix®および同様のオペレーティングシステムの無効なプロセスは、目的の機能を実行しなくなってもプロセステーブルの存在を維持するという点で、ゾンビに類似していると見なすことができます。 プロセスの実行が終了すると、プロセスが停止したと言われることがありますが、オペレーティングシステムがプロセステーブルの割り当てを回復する手段は、リーピングと呼ばれる場合があります。 ゾンビの親プロセスは、技術的にはその子を刈り取ることになっていますが、これは常に起こるとは限りません。
ゾンビプロセスの存在が意図的であるか、望ましい場合さえある特定のケースがあります。 子プロセスの実行が停止した後、親は後で同じプログラムの別のインスタンスを実行する必要がある場合があります。 ゾンビがプロセステーブルから削除されていない場合、新しい子には古い子と同じID(ID)が割り当てられません。 特定のプログラムは、この種の差別化から利益を得るか、必要とする場合さえあります。
親プロセスが待機しているゾンビを獲得するために待機コマンドを実行していない場合、問題を強制することが可能です。 これは通常、killコマンドを介して行われ、SIGCHLDシグナルを親プロセスに送信します。 すべてが正常に機能している場合、このシグナルを受信する親プロセスはゾンビの子を取得して、IDとプロセステーブルの位置を再利用できるようにする必要があります。
特定の状況下では、親プロセスはSIGCHLDシグナルを無視する場合があります。 これが発生し、オペレーターがプロセステーブルのクリアを希望する場合は、親プロセスが強制終了される可能性があります。 親プロセスが作成したゾンビはすべて、initプロセスの子として割り当てられます。 initは定期的にその子に対してwaitコマンドを開始するため、担当するゾンビは最終的にプロセステーブルから削除されます。