Re: [理工] [ OS ]fork
※ 引述《MiiQ (越來越....)》之銘言:
: ※ 引述《jameschou (DOG)》之銘言:
: : main() <= 1個
: ^^^^^^^^^^^^^^^^
: : 這行if( fork()==0 ) 的fork 1個
: : 然後分成
: : 父 子
: : {}內不做 做{}內:
: : 然後最下面的 第一個fork()又分裂成兩個行程
: : fork(); / \
: : 第二個:fork() fork()
: : =>父: 1個 / \ / \
: ^^^^^^^^^^^^
我不是很懂你下面參考那個是要幹麻的 sorry
不過我先解釋一下我寫的這個
main()算一個是題目要求的
當然main跟parent我沒有重複算
"父"的那一個 就是main裡面走到最下面那個if{}結束後的fork()
因為在if(...)那裡面fork之後 parent還是會走到最後面那個fork()
而那個fork()不就等於跑出一個process了
所以我父的那一個是算這個
而我說的最上面兩個 一個是main() 一個是if裡面的fork() 也就是跑出"子"的那個
然後子裡面第一個fork() ->又跑出一個 => +1
這兩個在下一行的第二個fork()又會分別再跑出一個 => +2
然後這四個在出了if後又都會跑最下面那個fork() => +4
所以總共是 main() + if裡的fork + parent的最下面fork + 上面我說"子"含的7個fork
共10個
: 參考一下
: main(){
: if(fork()==0) exec("programA");
: else{
: if(fork()==0) exec("programB");
: else exec("programC");
: }
: }
: parent
: main() & programC
: / \
: child 1 child 2
: Program A program B
: 以上 這個題目讓我覺得你把main跟parent重複算了
: parent本身就是會去執行main,第一個fork,最後一個fork
: 由第一個fork產生的child去執行if中的兩個fork去產生child
: 產生結過並沒有要求child去執行任何工作
: 有錯請指教 囧
┼
/\
: : 這四個再分別做最下面的fork()
: : => 子: 1+2+4 = 7個
: : 全部就是最上面2個加上父1個加上子7個 => 共10個
: : 不確定對不對
: : 不過看起來好像有點道理@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.179.202
※ 編輯: jameschou 來自: 114.25.179.202 (01/21 19:19)
→
01/21 19:38, , 1F
01/21 19:38, 1F
→
01/21 19:40, , 2F
01/21 19:40, 2F
→
01/21 19:41, , 3F
01/21 19:41, 3F
推
01/21 19:52, , 4F
01/21 19:52, 4F
→
01/21 20:02, , 5F
01/21 20:02, 5F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 4 篇):
理工
3
7