分叉的公式?

Formula for forking?

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

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

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

抱歉,如果 OS 术语在这里被误用,我将使用 'intuitive' 个单词。

每一个 fork 都从一个进程中创建两个进程。因此可以将单个 fork 视为 +2 -1.

从另一个角度考虑,我们会得出结论,在所有流程中完成 n forks 之后(根据程序流程)以及在每个结果流程调用之前exit 系统调用有 n 层的完整二叉树,每个叶子代表一个进程。因此,进程数将等于 2^n.

这是一个简单的说明(空白 rects --- 旧进程,绿色 rects --- 调用 _exit 之前的进程):