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

qq5*_*962 0 c linux operating-system

我在操作系统教科书上看到一个愚蠢的问题。问题如下:
假定所有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");
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ieu 5

但是当我从课本中键入相同的代码时,我得到了30行

这是正常的:

  • 在fork 1之后,您有2个进程,因此写入了2行,
  • 在fork 2之后,您有4个过程,因此写入了4行,
  • 在fork 3之后,您有8个进程,因此写入了8行,
  • 在fork 4之后,您有16个进程,因此写入了16行,

2 + 4 + 8 + 16等于30:您有30条线。