最近在看操作系統的書,在講到用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;
這是我個人的理解,如果有大牛感覺這個理解有問題。請留言指點~謝謝
