1

そのため、子が死ぬと親は get を取得しますSIGCHLDが、親が wait() を実行する前に死ぬと、子の親は に変更されinitます。この時点で、子はzombieie<defunct>です。

次は何が起こる?

その子に wait() を実行しますかinit? はいの場合、いつそれを行いますか? 制限時間に関する保証はありますか?

4

1 に答える 1

2

はい、initすぐにすべての子供を刈り取ります。多くのゾンビを無視しSIGCHLDて蓄積するプロセスを作成する場合は、説明するメカニズムを介してその親を殺すことでゾンビを取り除くことができます。

init参考までに、マルチユーザーモードで のメインループを示します。requested_transitionシグナリングによって設定されます(たとえば、更新されたものを読み取るためinitのクラシック):kill -1 1inittab

    while (!requested_transition)
            if ((pid = waitpid(-1, (int *) 0, 0)) != -1)
                    collect_child(pid);

collect_childログインシェルが新しいものを必要とするなど、initがプロセスに特別な関心を持っている場合を処理しますgetty

于 2011-12-13T22:47:48.293 に答える