int main(void)
{
fork();fork();fork();
printf("magic0\n");
return 0;
}
请问输出结果?
注意到前面的fork执行的时候还会调用后面的fork,不难数出magic0总共输出8次。
如果“fork();fork();fork()”改成"fork();fork();fork();fork()"结果怎样?
两个简单的原则:
a、一个fork语句会被前面的fork语句调用;
b、输出结果取决于子进程的个数;
展开来分析:
1、第一个fork产生1个子进程
2、第二个fork产生1+1,2个子进程
3、第三个fork产生1+2+1, 4个子进程
4、第四个fork产生1+2+4+1, 8个子进程
不难总结出,假设fork的个数为n,理论上magic的输出个数为2的n次方