呼叫fork,會有兩次返回,一次是父程序、一次是子程序,因為子程序是父程序的副本,所以它擁有父程序資料空間、棧和堆的副本,它們並沒有共享這些儲存空間,它們只共享正文段。 我們通過下面的程式驗證下。
程式的輸出:
this is the child process!
20415, 7, 11
this is the parent process! child processid=20415
20414, 6, 10
可以看出,子程序的值發生了改變,可以說明,它們並不是共享的。
我把變數的位址打出來,輸出如下:
this is the child process!
20505, 7, 11, 646334744
this is the parent process! child processid=20505
20504, 6, 10, 646334744
位址居然是一樣的,內容還是不一樣,原來這裡列印的變數的位址都是邏輯空間, 對於父子程序,它們的邏輯空間一樣,但是物理空間還是不同的。所以在多程序程式設計中,不要寄希望於通過位址來判斷兩個變數是否相同。
Linux 基於fork 函式父子程序之間的通訊
寫乙個程式,包含兩個程序,在子程序輸入參與計算的資料a b的值,在父程序中計算a b的值並輸出計算結果 要求輸出子程序和父程序的程序id.源程式 include include include include include include intmain void pid fork if pid ...
5 8fork父子程序
理解fork建立子程序的本質 1 開啟乙個有內容的檔案 2 呼叫fork建立子程序 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序分別讀到的字元是什麼 2 按如下要求編寫程式 1 呼叫fork建立子程序 2 開啟乙個有內容的檔案 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序...
Linux 父子程序與fork
每個程序都有乙個非負整數表示的唯一程序id,如交換程序 即排程程序 id為0,init程序id為1,頁守護程序id為2 原型如下 fork函式被呼叫一次,但返回兩次,兩次返回的區別就是子程序返回的是0,父程序返回的新子程序的id 子程序是父程序的副本,獲得了父程序資料空間 堆和棧的副本 父子程序並不...