fork用於創建新進程,新進程與原進程具有從屬關系,原進程稱之為父進程,新建進程稱為子進程,此進程還有其他什麼關系呢?
1. 進程號
子進程的父進程應該為原進程,原進程的子進程應該為新建的進程號。
2. 返回值
使用fork新建進程返回值有三種,出錯返回-1,0返回給子進程 ,大於0的正整數返回給父進程。
3. 數據共享
子進程會復制父進程的所有數據,在fork進程之前是數據會被復制到子進程中,一般通過返回值來判斷子進程執行的內容。
[code] int main() { pid_t pid; int i = 0; pid = fork(); if (pid == -1) //創建失敗 { printf("creat process error!\n"); exit(1); } else if (pid == 0) //子進程 { printf("The child process ID is %d\n",getpid()); i++; } else // 父進程 { printf("The father process ID is %d\n",getpid()); i++; } printf("i = %d\n", i); return 0; }
[code]首先看一下此程序段,按照常規的if...else... 的邏輯兩段代碼應該是矛盾的,不會同時執行,但是實際上卻同時執行了,那麼原因是什麼呢?原因在於上面的第2點,返回值的返回為0給子進程,大於0給父進程。由於在采用fork之後,有兩個進程同時執行,只不過在兩個進程中,子進程執行的是if內的內容,而父進程執行的是else的內容,執行的程序段不一樣而已,並不矛盾。