看板 Grad-ProbAsk 關於我們 聯絡資訊
※ 引述《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