看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《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);
bjk:因為parent有wait(NULL) 所以會等兒子先做完07/29 21:29
bjk:才跑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
mqazz1:謝謝 不過為什麼高彬的解答說 last output是parent的k? 07/29 21:25
bjk:因為parent有wait(NULL) 所以會等兒子先做完 07/29 21:29
bjk:才跑else的那段程式碼 07/29 21:29
※ 編輯: bjk 來自: 59.105.81.102 (07/29 21:30)
wheels:child exit後會送一個訊息給kernel通知parent wait結束 07/29 23:48
wheels:所以最後的那個k是parent的 07/29 23:48
da0910cc: 07/31 10:53