[理工] OS fork()的問題

看板Grad-ProbAsk作者 (jacklen)時間8年前 (2017/11/29 00:00), 編輯推噓4(4013)
留言17則, 5人參與, 8年前最新討論串1/2 (看更多)
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的條件嗎 抱歉手機排版有點亂 麻煩大大幫忙解惑>< ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.36.76 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1511884813.A.3F1.html

11/29 00:44, 8年前 , 1F
看得出來你程式寫得少 這是迴圈觀念上的問題
11/29 00:44, 1F

11/29 00:46, 8年前 , 2F
1.先fork()再判斷大小所以會先生child 鉛筆色進迴圈
11/29 00:46, 2F

11/29 00:47, 8年前 , 3F
黃色進else if所以只有它產藍色
11/29 00:47, 3F

11/29 00:47, 8年前 , 4F
知道這個什麼意思 但是不太會解釋
11/29 00:47, 4F

11/29 00:49, 8年前 , 5F
2.主行程回傳子行程pid 兩個行程進迴圈兩次fork
11/29 00:49, 5F

11/29 00:49, 8年前 , 6F
紅色不會再出來判斷條件
11/29 00:49, 6F

11/29 00:55, 8年前 , 7F
解這種題目要把握的兩個觀念:1. 當程式呼叫 fork()
11/29 00:55, 7F

11/29 00:56, 8年前 , 8F
時,會複製出一份一模一樣的程式碼,而且會從fork()
11/29 00:56, 8F

11/29 00:57, 8年前 , 9F
執行完的地方繼續執行(parent和child都是)。
11/29 00:57, 9F

11/29 00:58, 8年前 , 10F
2. 畫 process tree 的資料結構盡量用 Left-child,
11/29 00:58, 10F

11/29 00:58, 8年前 , 11F
right-sibling binary tree,在視覺上或觀念上都會
11/29 00:58, 11F

11/29 00:59, 8年前 , 12F
很清楚,這樣不管題目怎麼出就都不會錯
11/29 00:59, 12F

11/29 01:03, 8年前 , 13F
fork相當於一個帶有回傳值的副程式,放在if條件中要
11/29 01:03, 13F

11/29 01:03, 8年前 , 14F
先執行完並得到回傳值在判斷條件
11/29 01:03, 14F

11/29 01:04, 8年前 , 15F
話說我之前有發過文特地追蹤一題,你可以去看一下
11/29 01:04, 15F

11/29 22:48, 8年前 , 16F
謝謝t大s大 有看到你們詳細的追蹤後完全懂了 真的太
11/29 22:48, 16F

11/29 22:48, 8年前 , 17F
感激了 ㄒ_ㄒ
11/29 22:48, 17F
文章代碼(AID): #1Q7OWDFn (Grad-ProbAsk)
文章代碼(AID): #1Q7OWDFn (Grad-ProbAsk)