[問題] 請問關於fork的問題
關於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
11/22 00:48, 1F
→
11/22 00:50, , 2F
11/22 00:50, 2F
→
11/22 01:00, , 3F
11/22 01:00, 3F
→
11/22 01:02, , 4F
11/22 01:02, 4F
→
11/22 01:03, , 5F
11/22 01:03, 5F
→
11/22 03:09, , 6F
11/22 03:09, 6F
(補充在上面)
※ 編輯: itisjb 來自: 114.32.9.209 (11/22 09:55)
→
11/22 12:38, , 7F
11/22 12:38, 7F
→
11/22 12:38, , 8F
11/22 12:38, 8F
→
11/22 12:50, , 9F
11/22 12:50, 9F
→
11/22 12:56, , 10F
11/22 12:56, 10F
→
11/22 13:19, , 11F
11/22 13:19, 11F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章