2016-04-22 67 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行。