2015-10-28 114 views
1

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

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

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

+2

...但显然对于n = 1 –

+0

事实上不正确,一个相当简单的问题,我被混淆了! –

回答

1

对不起,如果操作系统术语在这里被滥用,我会用'直观'的话来说明这个案例。

每个叉子都创建两个过程。因此可以认为单个fork+2 -1

思考它,我们会得出结论的其他方式,经过nforks已经在所有进程已经完成(根据程序流),以及每次得到的进程调用系统调用exit权利之前有完全二叉树n每个叶代表一个过程。因此,进程计数将等于2^n

下面是一个简单的例子(空白rects ---老工艺,绿色rects ---过程调用之前有权_exit): enter image description here