view code
#include #include輸出:#include
#include
intmain()
else
if (pid > 0
)
else
exit (0);
}

列印出來的 x 的位址是虛擬位址而不是實體地址(匯流排位址)。
子程序「繼承」父程序的變數,其位址總是一樣的,因為在fork時整個虛擬位址空間被複製,但是虛擬位址空間所對應的物理記憶體卻沒有複製(這個時候父子進
程中變數 x對應的虛擬位址和實體地址都相同)。等到虛擬位址空間被寫時,對應的物理記憶體空間被複製(這個時候父子程序中變數 i
對應的虛擬位址還是相同的,但是實體地址不同),這就是"寫時複製"。
那個一樣的位址是線性位址,每個程序的相同的線性位址都可以對映到不同的實體地址上。在fork的時候,子程序從父程序了copy了task_struct結構,其中task_struct裡的mm就是線性位址的使用情況,mm也會被copy給子程序,所以在fork之前宣告的變數,在fork後在父程序和子程序裡的線性位址是一樣的。
fork後父子程序共享資源
unix環境高階程式設計中8.3節中說,子程序是父程序的副本。例如,子程序獲得父程序資料空間 堆和棧的副本。注意,這是子程序所擁有的副本。父程序和子程序並不共享這些儲存空間部分。父程序和子程序共享正文段。書中還預留了例子說明子程序對變數所做的改變並不影響父程序中該變數的值。fork.c 父子程序共享...
fork 父子程序變數之間的關係
呼叫fork,會有兩次返回,一次是父程序 一次是子程序,因為子程序是父程序的副本,所以它擁有父程序資料空間 棧和堆的副本,它們並沒有共享這些儲存空間,它們只共享正文段。我們通過下面的程式驗證下。程式的輸出 this is the child process 20415,7,11 this is th...
5 8fork父子程序
理解fork建立子程序的本質 1 開啟乙個有內容的檔案 2 呼叫fork建立子程序 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序分別讀到的字元是什麼 2 按如下要求編寫程式 1 呼叫fork建立子程序 2 開啟乙個有內容的檔案 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序...