在for中设置进程

时间:2012-11-25 14:43:52

标签: c fork

我有这个功能:

 void set_background(int n){
       int i;
       for(i=0;i<n;i++)
          fork();
  }

此过程必须使用fork设置n个进程。我如何通过fork()到i = 0来设置for中的n个进程,如果我们有父进程和子进程,并且i = 1有4个进程等等?

1 个答案:

答案 0 :(得分:3)

您需要监控fork()的返回值。

void set_background(int n)
{
    for (int i = 0; i < n; i++)
    {
         pid_t pid;
         if ((pid = fork()) < 0)
             ...process error...
         else if (pid == 0)
         {
             ...do childish things...
             exit(EXIT_FAILURE);
         }
    }
    /* If here, must be parent */
}

如果确保“幼稚”处理永远不会返回,则可以简化控制流程。我已通过exit(EXIT_FAILURE);电话强制执行此操作。

请注意,在原始代码中,父代在循环的第一次迭代中分叉,因此在循环结束时有两个进程在运行。在第二次迭代之后,父级和子级分叉,所以你有4个进程在运行。在第N次迭代之后,您运行了2个 N 进程。这很少是期望的效果。这种无界循环版本被称为“叉炸弹”,它能够让机器瘫痪。