我在操作系统教科书上看到了一个愚蠢的问题。问题如下:
假设所有fork系统调用都成功。执行下面显示的程序后。屏幕上有多少行?
我假设每次fork调用都会使进程加倍,因此结果应该是16进程创建。但是当我从教科书中输入相同的代码时,我得到了30行。这是结果和代码:
http://imgur.com/zrdOP0X
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
fork();
printf("After fork1\n");
fork();
printf("After fork2\n");
fork();
printf("After fork3\n");
fork();
printf("After fork4\n");
}
答案 0 :(得分:4)
但是当我从教科书中输入相同的代码时,我得到了30行
这是正常的:
2 + 4 + 8 + 16等于30:你有30行。
答案 1 :(得分:0)
结果应该是这样的:
fork1
fork2
fork3
fork4
fork4
fork3
fork4
fork4
fork2
fork3
fork4
fork4
fork3
fork4
fork4
fork1
fork2
fork3
fork4
fork4
fork3
fork4
fork4
fork2
fork3
fork4
fork4
fork3
fork4
fork4
(这些空间只是为了更好的阅读)