[理工] fork()問題

看板Grad-ProbAsk作者 (絕代風華賈奈特)時間8年前 (2017/04/04 18:48), 編輯推噓3(3010)
留言13則, 3人參與, 最新討論串1/1
各位大大好,小弟看到一題詢問有多少process會產生的fork()提,想請問各位要 怎麼算及分析題目 int main(){ int i; for(i=0;i<3;i++){ if(fork()==0){ fork(); fork(); fork(); } } 我知道當i=0的時候會產生出8個process,但是i=1&i=2時要如何判定fork()==0? 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.158.250 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1491302883.A.9C3.html

04/04 20:02, , 1F
fork執行後,一個process會變成兩個process,一個是
04/04 20:02, 1F

04/04 20:03, , 2F
parent,一個是child,其中parent process從fork()得到
04/04 20:03, 2F

04/04 20:03, , 3F
的回傳值是child process的id,child process從fork()
04/04 20:03, 3F

04/04 20:04, , 4F
得到的回傳值為0,從這邊下去判斷是否為0
04/04 20:04, 4F

04/04 20:04, , 5F
跟i等於多少沒有關係
04/04 20:04, 5F

04/05 13:25, , 6F
parent process得到的回傳值不是0,不會通過if判別式
04/05 13:25, 6F

04/05 13:26, , 7F
i=0時 除了一開始的主程式外還會生出另外八個process
04/05 13:26, 7F

04/05 13:29, , 8F
而這些process在i=1時,因為if(fork()==0)而會產生
04/05 13:29, 8F

04/05 13:30, , 9F
其他9個child process,跑完i=1後共81個process
04/05 13:30, 9F

04/05 13:32, , 10F
依此類推~配合yu大大的推文應該可以理解
04/05 13:32, 10F

04/08 01:07, , 11F
每一次跑loop的時候遇到的fork產生的child的回傳值才會是
04/08 01:07, 11F

04/08 01:07, , 12F
0 以前的child已經不是child惹
04/08 01:07, 12F

04/08 10:07, , 13F
為人子女有朝一日也會成為父母
04/08 10:07, 13F
文章代碼(AID): #1OutdZd3 (Grad-ProbAsk)