2016-04-22 581 views
0

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

#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"); 
} 
+2

杈叉的叉。 –

+0

什么是2 + 4 + 8 + 16? – Peter

回答

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

(空格仅用于更好的阅读)

3

但是,当我从教科书中键入相同的代码,我得到了30日线

这是正常的:

  • 叉1后,你有2个过程,所以2行写,
  • 叉2后,你h AVE 4个过程,所以4行被写入,
  • 叉3之后,有8个过程,所以8行被写入,
  • 叉4后,有16个过程,所以16行被写入,

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