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