ゾンビ状態は、子プロセスが終了した場合に必要です。ゾンビ状態では、その親プロセスがwait()
を呼び出すまで終了値が保存されます。Linuxではゾンビ状態のプロセスが本当に必要ですか?
しかし、子プロセスが終了しすぐに子プロセスのリソースを完全に解放するときに、親プロセスディスクリプタにその終了値を保存しないのはなぜですか?
たとえば、プロセスディスクリプタに子プロセスの終了値のスタックを追加するとします。
ゾンビ状態は、子プロセスが終了した場合に必要です。ゾンビ状態では、その親プロセスがwait()
を呼び出すまで終了値が保存されます。Linuxではゾンビ状態のプロセスが本当に必要ですか?
しかし、子プロセスが終了しすぐに子プロセスのリソースを完全に解放するときに、親プロセスディスクリプタにその終了値を保存しないのはなぜですか?
たとえば、プロセスディスクリプタに子プロセスの終了値のスタックを追加するとします。
fork - > waitモデルのキーは、終了ステータス(およびその他の情報)を得ることができるわけではありませんが、プロセスのpidはあなたがそれを待つまで使用され続けます。つまり、誰かが突然、同じPIDをフォークして取得することはないと確信することができます。これは、場合によっては大きな価値があります。
ゾンビ自体は本当にあまり食べていません。 wikipediaから重いが長く解放され、実用的な目的のためにあなたはオーバーヘッドがプロセスを記述し、構造体に集約して使用されるPIDテーブル内のスロットをマーク想定することができるすべて..
:
プロセスは終了を介して終了し、それに関連付けられたメモリおよびリソースのすべてが割り当て解除されるので、他のプロセスによって使用されることができる。 ただし、プロセステーブルにプロセスのエントリが残っています。
ここではリソースに関する懸念はありません。今 子供が
を終了すると
は、親プロセスの記述子にその終了値を保存しない理由は、子供が親のプロセス記述子を変更/アクセスできないということです、あなたの質問に来ます。それは親としか通信できません。
したがって、子は
SIGCHLD
を親に送信します。親はその信号を処理するまでです。