作者jameschou (DOG)
看板Grad-ProbAsk
標題Re: [理工] [ OS ]fork
時間Fri Jan 21 19:18:07 2011
※ 引述《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)
→ MiiQ:這樣子我有一個問題就是當if(...){forkA,forkB} 01/21 19:38
→ MiiQ:然後AB兩個fork讓if(fork)生出2個child->再生4個? 01/21 19:40
→ MiiQ:喔喔喔 我看懂你的意思了 01/21 19:41
推 MiiQ:不過我是覺得他們不會都去跑最後一個fork就試了 0.0 01/21 19:52
→ MiiQ:那個例子只是讓我覺得是parent在執行main而不是main產生paren 01/21 20:02