
Re: [理工] OS fork()的問題
看板Grad-ProbAsk作者alan23273850 (God of Computer Science)時間8年前 (2017/11/29 16:12)推噓0(0推 0噓 1→)留言1則, 1人參與討論串2/2 (看更多)

: 小弟有些地方不太清楚想請教大大們><
: 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
閒來無事就來賺點微薄的 P 幣 ~
https://i.imgur.com/aCFOMDK.jpg

每個節點 fork 出去時 左側是回傳值(child process id) > 0 的部分,也就是 parent
process,而右側是回傳值 == 0 的部分,也就是 child process。
運用 left child-right sibling 的二元樹就能有效辨別 parent 和 child 兩個 case。
如果考試時忘記 fork() 回傳 > 0 或 == 0 是 parent process 還是 child process,
其實也不用慌張,因為反正 fork() 這個函式就只是產生多一個新的 process,你只要
確保在畫樹的時候統一 > 0 在一邊,== 0 在另外一邊,如此一來最後的 process 總數
仍然會是一樣的。
因此這題最後總共曾經產生了 14 個 process,如果連 main 自己也算進去的話。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.99
※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1511943175.A.97B.html
→
11/29 22:49,
8年前
, 1F
11/29 22:49, 1F
討論串 (同標題文章)