Linux中fork函式的呼叫情況分析

2021-05-12 18:46:36 字數 730 閱讀 4478

分析以下**輸出結果,已知從這個程式執行到這個程式的所有程序結束這個時間段內,沒有其它新程序執行。

1、請說出執行這個程式後,將一共執行幾個程序。

2、如果其中乙個程序的輸出結果是「pid1:1001, pid2:1002」,寫出其他程序的輸出結果(不考慮程序執行順序)。

這裡考查的是fork()的呼叫情況,在linux中,fork()函式會重新起乙個程序,並作為原程序的子程序。該程序保留了原程序中執行到這個fork()函式前的所有資料(變數、環境變數、程式計數器等)的數值,而原程序按照普通流程繼續執行。在子程序中,fork()返回0,而父程序返回分配的pid的實際值。

第一步,遇到

pid1 = fork()

,產生乙個子程序(1號),這時父程序的pid1 = 1001,而子程序的pid1 = 0.

第二步,父程序往下執行,遇到

pid2 = fork()

,又產生乙個子程序(2號),父程序的pid2 = 1002,而子程序的pid2 = 0.

第三部,1號子程序往下執行,遇到

pid2 = fork()

,也產生乙個子程序(3號),1號子程序的pid2 = 1003,而3號子程序的pid2 = 0.

綜合上訴三步,產生的程序號組合是:(1001,1002)、

(1001,0)、(0,1003)、(0,0)

當然,上述結果中的1002和1003因為時間先後的因素可以調換,不過題設條件已經做了限定,此處不用考慮。

Linux中fork 系統呼叫函式

什麼是fork 呼叫fork 發生了什麼 子程序建立後,系統會給子程序分配資源,然後把原來的程序的所有值都複製到新的子程序中,只有少數值與原來的程序的值不同 其實就是父程序的乙份副本。但是子程序和父程序駐留在不同的記憶體空間上。這些記憶體空間具有相同的內容,並且乙個程序執行的任何操作都不會影響其他程...

深究 linux 的 fork 函式呼叫示例

這裡講解幾個在 linux 作業系統上使用 fork 系統呼叫。不定期更新 一 atexit 函式 void cleanup void void fork6 執行結果 int atexit void func void 函式,當程序正常結束時才會呼叫 atexit 中的 func 方法,無論你將 f...

c 中的fork函式 FORK()函式

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