()フォークで二回ゾンビを避けてください

ゾンビ、実行して観測を生成するプログラムを提供します。

書式#include <stdio.hに>

書式#include <stdlib.h>に含ま

書式#include <SYS / types.h>に

書式#include <sysの/ wait.h>

メインint型()

{

    PIDのint;

    PID =フォーク()。

    (PID> 0)//父・プロセスの場合

     {

      int型I = 1;

      一方、(I <= 12)

      {

        睡眠(1)。

        I + = 1;

          }

     }

    それ以外の場合(PID == 0)//息子プロセス

     {

       int型J = 1;

       一方、(j <= 4)

        {

         睡眠(1)。

         J + = 1;

            }

       出口(0);

     }  

    0を返します。

}

明らかに、子プロセスの間〜4をもたらした、子供の終了後4S、その後、親プロセスについて及び終了まで8S時間程度12Sは、ゾンビプロセスとなった場合、結果が見ることができます。

 

以下の手順は、ゾンビを回避するには、2本のフォーク()の上、すなわち使用の変換に基づいています。

書式#include <stdio.hに>

書式#include <stdlib.h>に含ま

書式#include <SYS / types.h>に

書式#include <sysの/ wait.h>

メインint型()

{

    PIDのint;

    PID =フォーク()。

    (PID> 0)//父・プロセスの場合

     {

      (0)待つ; //は、息子のプロセスの終了を待っています

      int型J = 1;

      一方、(j <= 12)

      {

        睡眠(1)。

        J ++;

      }

     }

    それ以外の場合(PID == 0)//息子プロセス

     {

      int型のPID2。

      PID2 =フォーク()。

      (PID2> 0)//息子プロセスの場合

      {

        出口(0);

      }

      それ以外の場合(PID2 == 0)//孫プロセス

      {

        int型I = 1;

        一方、(I <= 4)

        {

             睡眠(1)。

             I ++;

        }

        出口(0);

      }

     }

    0を返します。

}

おすすめ

転載: blog.csdn.net/weixin_42048463/article/details/94715809