Re: [理工] [OS] fork()

看板Grad-ProbAsk作者 (Up2u)時間14年前 (2011/07/29 21:15), 編輯推噓3(303)
留言6則, 4人參與, 最新討論串2/3 (看更多)
※ 引述《mqazz1 (無法顯示)》之銘言: : #include <stdio.h> : #include <unistd.h> : void func(int *input) : { : (*input)++; : } : int main() : { : pit_t pid; : int k; : k=3; : pid = fork(); : if(pid<0) fork失敗跑這裡 : { : func(&k); : printf("k=%d ", k); : exit(-1); : } : else if(pid==0) child 跑這裡 : { : func(&k); : printf("k=%d ", k); : } : else 父親跑這裡 : { : wait(NULL);

07/29 21:29,
因為parent有wait(NULL) 所以會等兒子先做完
07/29 21:29

07/29 21:29,
才跑else的那段程式碼
07/29 21:29
: func(&k); : printf("k=%d ", k); : exit(0); : } : } : (A) the output k of the parent process is 4 : (B) the output k of the child process is 4 : (C) the last output of k is 4 : 請問這段程式是怎麼跑的? : 謝謝 fork共用code section 但不共用data section 所以父親的k和兒子的k不共用 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.105.81.102

07/29 21:25, , 1F
謝謝 不過為什麼高彬的解答說 last output是parent的k?
07/29 21:25, 1F

07/29 21:29, , 2F
因為parent有wait(NULL) 所以會等兒子先做完
07/29 21:29, 2F

07/29 21:29, , 3F
才跑else的那段程式碼
07/29 21:29, 3F
※ 編輯: bjk 來自: 59.105.81.102 (07/29 21:30)

07/29 23:48, , 4F
child exit後會送一個訊息給kernel通知parent wait結束
07/29 23:48, 4F

07/29 23:48, , 5F
所以最後的那個k是parent的
07/29 23:48, 5F

07/31 10:53, , 6F
07/31 10:53, 6F
文章代碼(AID): #1EChABYi (Grad-ProbAsk)
文章代碼(AID): #1EChABYi (Grad-ProbAsk)