我有这个功能:
void set_background(int n){
int i;
for(i=0;i<n;i++)
fork();
}
这个过程必须用一个分支来设置 n 个进程。如果我们有父进程和子进程,并且 i=1 有 4 个进程,依此类推,我如何通过将 fork() 设置为 i=0 来在 for 中设置 n 个进程?
您需要
监视来自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 次迭代后,您将运行 2N 个进程。 这很少是预期的效果。 这种无界循环版本被称为"叉子炸弹",它能够使机器屈服。