分叉公式?

时间:2015-10-28 18:09:32

标签: operating-system fork formula recurrence

是否有一个封闭的表单来计算n分叉后的进程总数?例如,对于类似的东西:

int main() 
{
 fork();
 fork();
 fork();
}

我想出了公式n(n+1)/2 + n-1。在n = 3时,如上所述,8的答案是正确的。这个公式是否正确?

1 个答案:

答案 0 :(得分:1)

很抱歉,如果在这里滥用操作系统术语,我会直接使用'直观'案件的话。

每个fork都会创建两个进程。因此,可以将单fork视为+2 -1

从另一方面考虑,我们得出的结论是n forks在所有进程中完成后(根据程序流程)并且在每个结果进程调用之前exit系统调用存在具有n级别的完整二叉树,每个叶子代表一个进程。因此,进程计数将等于2^n

这是一个简单的例子(空白的rects ---旧的进程,绿色的rects ---在调用_exit之前的进程): enter image description here