[理工] OS fork()的問題

作者: s90210jackle (jacklen)   2017-11-29 00:00:10
https://i.imgur.com/wjokZQK.jpg
小弟有些地方不太清楚想請教大大們><
1. If裡面的fork是不是不管前面的process=0或>0都要生child 所以這裡第一層的chlid和main都可以生chlid?
但是為什麼到了else if 的fork只有黃色=0的child可以生藍色child
2. Main遇到第一個fork所生的鉛筆色child >0 是因為遇到第二個黃色的fork生出child 而由原本的=0變成>0嗎?
遇到了紅色fork由>0的main和第一層child生出下面的child我可以可以理解 但是為什麼遇到綠色fork的時候 可以由第三層紅色child生出 它們不是=0不符合if的條件嗎
抱歉手機排版有點亂 麻煩大大幫忙解惑><
作者: olen0622 (hong)   2017-11-29 00:44:00
看得出來你程式寫得少 這是迴圈觀念上的問題1.先fork()再判斷大小所以會先生child 鉛筆色進迴圈黃色進else if所以只有它產藍色
作者: barry70490 (blacksea741)   2017-11-29 00:47:00
知道這個什麼意思 但是不太會解釋
作者: olen0622 (hong)   2017-11-29 00:49:00
2.主行程回傳子行程pid 兩個行程進迴圈兩次fork紅色不會再出來判斷條件
作者: alan23273850   2017-11-29 00:55:00
解這種題目要把握的兩個觀念:1. 當程式呼叫 fork()時,會複製出一份一模一樣的程式碼,而且會從fork()執行完的地方繼續執行(parent和child都是)。2. 畫 process tree 的資料結構盡量用 Left-child,right-sibling binary tree,在視覺上或觀念上都會很清楚,這樣不管題目怎麼出就都不會錯
作者: TMDTMD2487 (ㄚ冰)   2017-11-29 01:03:00
fork相當於一個帶有回傳值的副程式,放在if條件中要先執行完並得到回傳值在判斷條件話說我之前有發過文特地追蹤一題,你可以去看一下
作者: s90210jackle (jacklen)   2017-11-29 22:48:00
謝謝t大s大 有看到你們詳細的追蹤後完全懂了 真的太感激了 ㄒ_ㄒ

Links booklink

Contact Us: admin [ a t ] ucptt.com