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


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

//創建一個子進程;
#include "csapp.h"

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

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

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

  fork();  //位置1·

  fork();  //位置2

  printf("hello/n");

  exit(0); }

//結果打印出4個hello;
為什么會這樣呢?
原來在創建子程序時,子程序會得到父程序的一份拷貝,那么其中也包括下一條指令指針。具體如下:

開始只有一個父進程;

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

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

這是我個人的理解,如果有大牛感覺這個理解有問題。請留言指點~謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM