0

我有这个功能:

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

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

4

1 回答 1

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个进程正在运行。这很少是想要的效果。这种无界循环版本被称为“叉形炸弹”,它能够让机器瘫痪。

于 2012-11-25T14:48:42.003 回答