關於操做系統中多個fork()會建立幾個進程的理解

最近在看操做系統的書,在講到用fork()建立子進程時,有些地方一時迷惑,最終理解,特記錄下來。以下:app

//建立一個子進程;
#include "csapp.h" 操作系統

int main() {   
fork();   
printf("hello/n");   
exit(0);}指針

//打印出兩個hello;不難理解,主程序一個,子程序一個;那麼若是是兩個fork()呢? 進程

#include "csapp.h" int main() {it

  fork();  //位置1·程序

  fork();  //位置2fork

  printf("hello/n");printf

  exit(0); }系統

//結果打印出4個hello;
爲何會這樣呢?
原來在建立子程序時,子程序會獲得父程序的一份拷貝,那麼其中也包括下一條指令指針。具體以下:

開始只有一個父進程;

父進程執行完第一個fork()(這時下一條指令指針變成位置2)。
  建立出的一個子進程(這個進程也會從位置2開始執行)
    因此這個子進程會又建立一子子進程;(這時就有兩個子進程了)

父進程再執行第二個fork();
  又會建立一個子進程(這時就三個子進程了)
加上父進程一共四個,因此輸出4個hello world;

這是我我的的理解,若是有大牛感受這個理解有問題。請留言指點~謝謝

相關文章
相關標籤/搜索