看板 Grad-ProbAsk 關於我們 聯絡資訊
我想要整個追蹤一次所以我直接打一篇給你好了 建議用網頁版看 先幫程式行數編號 main(){ 1 fork(); 2 if fork() == 0 then 3 fork(); 4 else if fork()>0 then 5 fork(); } fork會生出小孩,而且自己的fork值設成小孩的編號(>0),小孩的fork值會是0 然後等等process旁邊的小編號,是我記錄程式下一行的執行位子(x代表結束 注意的是if/else if內的fork是會執行的,你如果有寫過程是你應該可以理解 因為fork不是一個變數,是一個帶有回傳值的function ----------------------------------------------------------------------- 1. main 執行 1)fork 生出 a main (2) | a (2) ----------------------------------------------------------------------- 2. main/a 執行 2)if fork 生出 b/aa 並且 main/a 的fork值大於0會離開if, b/aa 則會進入 main(4) / \ a(4) b(3) | aa(3) ----------------------------------------------------------------------- 3. aa/b 執行 3)fork 生出 aaa/ba ,而且這四個會離開if並結束 main/a 執行 4)else if fork 生出 c/ab , 並且 c/ab 的fork等於0會離開 else if 並結束,而 main/a 會進入 m a i n (5) / | \ a(5) b(x) c(x) / \ | aa(x) ab(x) ba(x) | aaa(x) ----------------------------------------------------------------------- 4. 就那兩個執行 5)fork 各生一個,然後都結束 所以就長這樣 __main__ | | | | o o o o /|\ | ooo o | o -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 134.208.0.169 ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1510303793.A.9A7.html
lovepipi: 謝謝你 我看看 謝謝你嗚嗚嗚 11/10 16:50
leoone: 推圖hen用心XDD 11/10 18:13