分叉的公式?
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
之前的进程):
是否有一个封闭的表格来计算 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
之前的进程):