有多少个进程总数?

时间:2016-09-19 09:45:33

标签: operating-system fork

昨天,我接受了采访,我被问到使用fork()的代码片段问题。

void main()
{............
for (int k=1;k<=10;k++)
{
pid[k]=fork();
if(!pid[k])
execvp(.....);
}
}

根据我的理解,我告诉1024个总进程将包括父级为2 ^ n -1 = 1023 + 1个父级,其中n =总分叉

但是,面试官回答说我的回答是错误的。

我的理解有什么问题?

1 个答案:

答案 0 :(得分:1)

鉴于此代码

pid[k]=fork();
if(!pid[k])
    execvp(.....);

并阅读the man page of fork,其中说明了

  

成功时,子进程的PID在父进程中返回,          在孩子身上返回0。

我们知道子进程将执行exec调用(并继续执行不同的程序),而父进程将循环并创建另一个子进程。

这意味着将为循环的每次迭代创建一个子项,在本例中为10次。所以,答案是10个孩子+ 1个父母= 11。

现在,如果由exec启动的程序是同一个程序,那么只有当计算机的内存耗尽时才会停止:每次迭代时,每个迭代10个程序将创建10个子项,每个子项将创建10个子项,因此上。 fork()的一个特点是父母和孩子得到相同变量的图像(这将导致可预测的子女数量,即一些与2的幂相关的数字),显然当程序得到时,这不是真的exec'd,这意味着可用内存将是唯一的限制。