在Linux中使用四个fork()之后创建了多少个进程?

我在操作系统教科书上看到了一个愚蠢的问题。 问题如下:
假设所有fork系统调用都成功。执行下面显示的程序后。 屏幕上有多少行?
我假设每次fork调用都会使进程加倍,因此结果应该是16进程创建。 但是当我从教科书中输入相同的代码时,我得到了30行。 这是结果和代码:
http://imgur.com/zrdOP0X

#include  #include  #include  int main(){ fork(); printf("After fork1\n"); fork(); printf("After fork2\n"); fork(); printf("After fork3\n"); fork(); printf("After fork4\n"); } 

结果应该是这样的:

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

(这些空间只是为了更好的阅读)

但是当我从教科书中输入相同的代码时,我得到了30行

这是正常的:

  • 在fork 1之后,你有2个进程,所以写了2行,
  • 在fork 2之后,你有4个进程,所以写了4行,
  • 在fork 3之后,你有8个进程,所以写了8行,
  • 在fork 4之后,你有16个进程,所以写了16行,

2 + 4 + 8 + 16等于30:你有30行。