我一直在试图理解 fork()
的行为。这次是在 for-loop
中。请观察以下代码:
#include <stdio.h>
void main()
{
int i;
for (i=0;i<3;i++)
{
fork();
// This printf statement is for debugging purposes
// getppid(): gets the parent process-id
// getpid(): get child process-id
printf("[%d] [%d] i=%d\n", getppid(), getpid(), i);
}
printf("[%d] [%d] hi\n", getppid(), getpid());
}
以下是输出结果:
[6909][6936] i=0
[6909][6936] i=1
[6936][6938] i=1
[6909][6936] i=2
[6909][6936] hi
[6936][6938] i=2
[6936][6938] hi
[6938][6940] i=2
[6938][6940] hi
[1][6937] i=0
[1][6939] i=2
[1][6939] hi
[1][6937] i=1
[6937][6941] i=1
[1][6937] i=2
[1][6937] hi
[6937][6941] i=2
[6937][6941] hi
[6937][6942] i=2
[6937][6942] hi
[1][6943] i=2
[1][6943] hi
我是一个非常视觉化的人,所以对我来说,真正理解事物的唯一方法就是用图表。我的导师说会有8个 嗨语句。我编写并运行代码,确实有8个 嗨语句。但我真的不明白。所以我画了下面这张图:
更新图表以反映评论:)
i=0
的 二实例? i
的什么值被传递给每个子级?如果结转相同的 i
值,那么什么时候“分叉”停止?2^n - 1
是否总是一种计算分叉子孩子数量的方法?那么,这里的 n=3
,意思是 2^3 - 1 = 8 - 1 = 7
的孩子,哪个是正确的?