**:
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只是用磁碟上的乙個新程式替換了當前程序的...