乙個程序,包括**、資料和分配給程序的資源。fork()函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。
乙個程序呼叫fork()函式後,系統先給新的程序分配資源,例如儲存資料和**的空間。然後把原來的程序的所有值都複製到新的新程序中,只有少數值與原來的程序的值不同。相當於轉殖了乙個自己。
我們來看乙個例子:
#include #include
intmain ()
pid_t fpid;//fpid表示fork函式返回的值
int count=0;
fpid=fork();if (fpid < 0)
printf("error in fork!");else if (fpid == 0) else{
printf("i am the parent process, my process id is %d/n",getpid());
printf("我是孩子他爹/n");
count++;
printf("統計結果是: %d/n",count);return 0;
執行結果是:
i am the child process, my process id is 5574
我是爹的兒子
統計結果是: 1
i am the parent process, my process id is 5573
我是孩子他爹
統計結果是: 1
在語句fpid=fork()之前,只有乙個程序在執行這段**,但在這條語句之後,就變成兩個程序在執行了,這兩個程序的幾乎完全相同,將要執行的下一條語句都是if(fpid<0)……
為什麼兩個程序的fpid不同呢,這與fork函式的特性有關。fork呼叫的乙個奇妙之處就是它僅僅被呼叫一次,卻能夠返回兩次,它可能有三種不同的返回值:
1)在父程序中,fork返回新建立子程序的程序id;
2)在子程序中,fork返回0;
3)如果出現錯誤,fork返回乙個負值;
在fork函式執行完畢後,如果建立新程序成功,則出現兩個程序,乙個是子程序,乙個是父程序。在子程序中,fork函式返回0,在父程序中,fork返回新建立子程序的程序id。我們可以通過fork返回的值來判斷當前程序是子程序還是父程序。
fork 函式 fork 函式的使用
fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...
C語言 fork函式
一 fork函式的使用 fork函式被宣告在unistd.h 標頭檔案中,包含 include 這個標頭檔案即可呼叫。int main else printf 統計結果是 d n count return 0 fork 之後的語句父程序和子程序都會執行,新主要用pid來區分,程序也會分配到新的記憶體...
fork函式 exec函式
fork 會產生乙個和父程序完全相同的子程序,出於效率考慮,linux中引入了 寫時複製 技術,也就是只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。在fork之後exec之前兩個程序用的是相同的物理空間 記憶體區 子程序的 段 資料段 堆疊都是指向父程序的物理空間,也就是...