[linux] fork() 基本概念 和他的變數相關。

[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


發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *