fork多个子进程 二

目的:主进程fork多个子进程

   效果是

 

 

方法一:直接看代码  for循环

void createsubprocess(int num)    

{    

    pid_t pid;    

    int i;    

    for(i=0;i<num;i++)    

    {    

        pid=fork();    

        if(pid==0||pid==-1)  //子进程或创建进程失败均退出,这里是关键所在  

        {    

            break;    

        }    

    }    

    if(pid==-1)    

    {    

        perror("fail to fork!\n");    

        exit(1);    

    }    

    else if(pid==0)    

    {    

        printf("子进程id=%d,其对应的父进程id=%d\n",getpid(),getppid());    

        exit(0);    

    }    

    else  

    {    

        printf("父进程id=%d\n",getpid());    

        exit(0);    

    }    

}

这种方法的关键就在于每次循环时,如果发现是子进程就直接从创建子进程的循环中跳出来,不让你进入循环,这样就保证了每次只有父进程来做循环创建子进程的工作。

 

  方法二:直接看代码 递归函数

void createsubprocess(int num,int max)    

{    

    if(num>=max)return;    

    pid=fork();    

    if(pid<0)    

    {    

        perror("fork error!\n");    

        exit(1);    

    }    

    //子进程    

    else if(pid==0)    

    {    

        sleep(3);    

        printf("子进程id=%d,父进程id=%d\n",getpid(),getppid());    

    }    

    //父进程    

    else  

    {    

        num++;    

        if(num==1)printf("父进程id=%d\n",getpid());    

        if(num<max)createsubprocess(num,max);    

        //此处加sleep是为了防止父进程先退出,从而产生异常    

        sleep(5);    

    }    

}

      这里的关键在于递归操作,只有父进程才进入递归创建子进程,子进程不进行这样的操作。

 

posted on 2014-04-10 11:34  yuanqing  阅读(484)  评论(0编辑  收藏  举报

导航