[linux] fork() 基本概念 和他的變數相關。
常常看到fork一詞,在OS裡面算是相當重要的基本概念。
一直沒時間去深究一下,就剛好藉此契機研究一下:D
資料參考於http://blog.csdn.net/jason314/article/details/5640969
真的非常精闢! 所以下面我研究的範例也未修改其標頭,一切轉載於此網頁!
/* * fork_test.c * version 2 * Created on: 2010-5-29 * Author: wangth */ #include <unistd.h> #include <stdio.h> int main(void) { int i=0; printf("i son/pa ppid pid fpid\n"); for(i=0;i<2;i++) { pid_t fpid=fork(); if(fpid==0) printf("%d child %4d %4d %4d\n",i,getppid(),getpid(),fpid); else printf("%d parent %4d %4d %4d\n",i,getppid(),getpid(),fpid); } return 0; }
他文章裡面的講解很清楚,只是有一點讓我不解的是 fork產生出來的child process變數會是怎樣的行為?
因為fork出來的child不會和parent共用變數,所以我一直以為他會回到main的源頭去取初始值。
所以在這個例子裡面我覺得會印出無窮迴圈,
因為for loop中的i每次在新的child被生成出來以後都會是零,然後就沒完沒了。
但是結果看起來跟我孱弱的推測不合,她是會停止的。
結果看起來就是他的child procee的 i
將會根據他被生出來的那時候的i來做初始值依據。
因此,在最後被生出來的child process i 將會等於1
等於一的話他在丟進去for判斷就發現不用再往下做了,所以就停止。
在這邊特別註記這個fork出來的child變數初始值雖然不會和他的parent process共用,
但是他的初始值應該就是在他被生出來的那一瞬間的那個值的內容。
猜測應該是這樣XD
527 Views