作者TMDTMD2487 (ㄚ冰)
看板Grad-ProbAsk
標題Re: [理工] 資料結構fork
時間Fri Nov 10 16:49:50 2017
我想要整個追蹤一次所以我直接打一篇給你好了 建議用網頁版看
先幫程式行數編號
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