Linux下fork函式的使用

2021-08-07 15:28:25 字數 1764 閱讀 7857

fork函式每呼叫一次,函式返回兩次,新程序(子程序)中返回0,原程序(父程序)中返回子程序的pid。
q:為什麼不是子程序中返回父程序pid,父程序中返回0呢?

那是因為乙個父程序有很多子程序,如果不返回其特定子程序的pid,之後需要呼叫其子程序時就找不到這個子程序了;而乙個子程序只有乙個父程序,如果要看其父程序的pid只需要通過呼叫getppid()函式即可。
舉乙個簡單的例子

**如下圖

**實現過程分析

在linux gcc環境下的執行結果為

由此延伸幾個fork函式的應用

例一:

void main()

}

執行一次結果:aabbab

執行兩次結果:aababb

… …

執行n次結果:總是包含3個a,3個b

**執行過程分析

注:fork函式呼叫之後,哪個程序優先執行,與作業系統的程序排程演算法和當前計算機環境有關,列印出來的先後是不定的。
例二:

void main()

執行結果:aab

**執行過程分析

注: 1||1 = 1;1 || 0 = 1;0 || 1 = 1;0 || 0 = 0

當「||」前為1時,則不用判斷後面乙個;如果「||」之前為0,繼續執行後面表示式。

例三:

void main()

}

執行一次結果:aaabbabb

… …

執行n次結果:總是包含4個a,4個b

**執行過程分析

注:當printf中沒有"\n"時,緩衝區無法重新整理,每個pcb的緩衝區都將保留函式返回的結果,當i = 1時,所產生的子程序將緩衝區也複製過來,因此,例三程式相對於例一就多出了乙個a和乙個b。
最後,在例三函式顯示父程序的執行過程中會出現孤兒程序,所謂孤兒程序就是說父程序已經結束,而子程序未結束,其子程序就成為了孤兒程序。

pid_t getpid()

//得到pid

ppid_t getppid()

//得到ppid

解決孤兒程序的方法:讓父程序在子程序結束之前進入睡眠狀態,即父程序在子程序結束之前不會結束。

# define a 5

sleep(a

--);

Linux下的fork 函式

fork fork的英文翻譯是 分叉 同樣在linux中我們也可以理解為如果使用了fork 函式,程序也會 分叉 下面進行具體的說明fork 函式。定義 通過系統呼叫建立乙個與原程序幾乎完全相同的程序,其中新產生的程序成為子程序。原型 pid t fork void fid t相當於int型別特殊之...

linux下fork的使用

需要包含標頭檔案 include include 函式宣告 pid t fork void 其中pid t在sys types.h中定義 typedef pid t pid t 可以看到只是乙個int.fork 通過複製呼叫過程來建立乙個新過程。新程序稱為子程序,與呼叫程序 稱為父程序 完全相同,但...

fork 函式 fork 函式的使用

fork的意思是個叉子,在unix及其衍生版linux中,用於建立子程序,現在看一下fork函式的基本用法。include includeint main printf c b fflush stdout fork printf c c fflush stdout 上圖的輸出是什麼呢?答案是 bab...