fork 父子程序變數之間的關係

2021-05-23 13:51:45 字數 579 閱讀 7943

呼叫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 子程序是父程序的副本,獲得了父程序資料空間 堆和棧的副本 父子程序並不...