fork函式的詳解

2021-09-02 09:42:48 字數 1290 閱讀 9855

**:

1.呼叫一次,返回兩次。

2.子程序中

fork返回0

,父程序中

fork

返回子程序的

pid。原因是:①在子程序中通過呼叫

getppid

可以方便的指導父程序的

pid;②沒有乙個函式可以使父程序獲得其所有子程序的

pid。(所以在

fork

返回時,將子程序的

pid直接返回給父程序)

注:子程序的

id不可能為

0,因為

pid為

0的程序是

程序。

3.父、子程序共享正文段,不共享資料、堆、棧段,子程序獲得父程序資料、堆、棧段的副本。

注:目前,大多數實現並直接複製父程序的資料、堆疊段,而是使用寫時複製(

copy-on-write

)技術,在修改這塊記憶體區域時,才會為被修改的資料建立副本。

4.子程序會獲得緩衝區的副本,即

fork

前程序緩衝區中的資料未被

flush

掉,則fork

後,子程序能夠獲得父程序緩衝區中的資料。

5.父程序所有被開啟的檔案描述符都會被複製到子程序中。

注:fork

之後處理檔案描述符通常有兩種情況:

①父程序等待子程序結束;

②父、子程序各自執行不同的正文段(父、子程序各自關閉不需要使用的檔案描述符);

6.fork

之後父、子程序的區別:

①fork

的返回值;

②程序id不同;

③父程序也不同;

④子程序的

tms_utime

、tms_stime

、tms_cutime

和tms_ustime

均被設定為0;

⑤父程序設定的檔案鎖不會被子程序繼承;

⑥子程序的未處理的鬧鐘被清除;

⑦子程序的未處理訊號集設定為空集;

7.fork

失敗的兩個主要原因:

①系統中程序數目已經達到上限;

②該實際使用者的程序總數達到系統限制;

8.fork

的兩種用法:

①乙個程序希望複製自己,使得父、子程序執行不同的**段。如父程序監聽埠,收到訊息後,

fork

出子程序處理訊息,父程序仍然負責監聽訊息。

②乙個程序需要執行另乙個程式。如

fork

後執行乙個

shell

命令。

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 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事,但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。然後把原來的程序的所有...

fork程式設計之exec函式詳解

基本概念 用fork函式建立新的子程序後,子程序往往要呼叫一種exec函式以執行另乙個程式。當程序呼叫一種exec函式時,該程序執行的程式完全替換為新程式,而新程式則從其main函式開始執行。因為呼叫exec並不建立新程序,所以前後的程序id並未改變。exec只是用磁碟上的乙個新程式替換了當前程序的...