标签: operating-system fork formula recurrence
是否有一个封闭的表单来计算n分叉后的进程总数?例如,对于类似的东西:
n
int main() { fork(); fork(); fork(); }
我想出了公式n(n+1)/2 + n-1。在n = 3时,如上所述,8的答案是正确的。这个公式是否正确?
n(n+1)/2 + n-1
n = 3
8
答案 0 :(得分:1)
很抱歉,如果在这里滥用操作系统术语,我会直接使用'直观'案件的话。
每个fork都会创建两个进程。因此,可以将单fork视为+2 -1。
fork
+2 -1
从另一方面考虑,我们得出的结论是n forks在所有进程中完成后(根据程序流程)并且在每个结果进程调用之前exit系统调用存在具有n级别的完整二叉树,每个叶子代表一个进程。因此,进程计数将等于2^n。
forks
exit
2^n
这是一个简单的例子(空白的rects ---旧的进程,绿色的rects ---在调用_exit之前的进程):
_exit