[問題] 請問關於fork的問題

看板LinuxDev作者 (J.B)時間16年前 (2009/11/22 00:30), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/1
關於fork() , 書上是這麼寫的 : fork() 會產生一個新的子行程,該子行程會複製父行程的資料與堆疊空間, 並繼承父行程的使用者代碼,群組代碼,環境變數,已開啟的檔案代碼,工作目錄, 資源限制等. 由於這些繼承的資訊是複製來的,並非是相同的記憶空間,因此,子行程對這些 變數的修改和父行程並不會同步.此外子行不會繼承父行程的檔案鎖定和未處 理的訊號. 可是當我寫了一個程式驗證這個問題 發現父行程與子行程所使用的變數,記憶體位置印出來都相同 可是值的確是不一樣... 請問是我驗證的方法有問題呢? 還是觀念不對? 謝謝~ 參考程式碼如下: 5 int main() 6 { 7 int test = 0; 8 pid_t self,child; 9 10 child = fork(); 11 12 if(child == 0) 13 { 14 sleep(5); 15 test = 3; 16 printf("\nChild process, value = %d, &value = %p\n",test,&test); 17 } 18 else 19 { 20 test = 5; 21 printf("\nParent process, value= %d, &value = %p\n",test,&test); 22 wait(); 23 printf("\nParent process, value= %d, &value = %p\n",test,&test); 24 } 25 return 0; 26 } ========================================================================= 執行結果是這樣: Parent process, value = 5, &value = 0xbf92ca4c Child process, value = 3, &value = 0xbf92ca4c Parent process, value = 5, &value = 0xbf92ca4c -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.233.132

11/22 00:48, , 1F
usepspace 可以有重複的va,但分屬不同process
11/22 00:48, 1F

11/22 00:50, , 2F
你不都指出會有一樣的stack了?so~懂沒?@@
11/22 00:50, 2F

11/22 01:00, , 3F
virtual memory
11/22 01:00, 3F

11/22 01:02, , 4F
如果說到virtual memory那我就可以理解....
11/22 01:02, 4F

11/22 01:03, , 5F
但stack的部份就不大能理解了...OS沒學好@@
11/22 01:03, 5F

11/22 03:09, , 6F
address是多少?
11/22 03:09, 6F
(補充在上面) ※ 編輯: itisjb 來自: 114.32.9.209 (11/22 09:55)

11/22 12:38, , 7F
0xb開頭明顯是在stack中,書上不是說會複製stack?
11/22 12:38, 7F

11/22 12:38, , 8F
所以位置(va)一樣~但實質上在實體記憶體上是不一樣的
11/22 12:38, 8F

11/22 12:50, , 9F
了解...所以stack跟virtual memory的說法是一樣的摟?
11/22 12:50, 9F

11/22 12:56, , 10F
是~stack只是一段記憶體~終究還是virtual的
11/22 12:56, 10F

11/22 13:19, , 11F
那這樣我就知道了...謝謝^^
11/22 13:19, 11F
文章代碼(AID): #1B21Mk-e (LinuxDev)
文章代碼(AID): #1B21Mk-e (LinuxDev)