計算create出幾個process? 轉貼:【批批踢實業坊】 for(i=0;i<3;i++) { if(fork()==0) /*A*/ { fork(); /*B*/ fork(); /*C*/ fork(); /*D*/ } } 答案是729 ( 9+9*8+(9+9*8)*8 ) 說明: 先看這題 int main() { fork(); fork(); fork(); } 包含main本身,結束後共有8個 如果不包含main本身,也就是多產生出來的process數,是7 main (first fork) / \ c / \ p / \ fork fork / \ / \ c/ \ p c/ \ p / \ / \ fork fork fork fork / \ / \ / \ / \ c p c p c p c p 再來看原本的題目 在main第一次進入 (i=0時候) if(fork()==0) 時候的瞬間 此時就算呼叫fork一次了 此時會有原本的main 跟 main產生的兒子1號 因為main的fork回傳值會是>0 所以不會進入三fork(); 但是兒子fork是0 會進入 所以 兒子1號就進入了 三fork(); 如前述所講 兒子1號 經過三fork會產生出7個兒子 就當作是 兒子2號~~~兒子8號吧 此時 i++; main本身 跟 兒子1號~兒子8號 共九個人 都當i=1世代的 新爸爸 回憶一下 一開始i=0的時候 "一個"原始的main 一輪結束後 最後多了八個人 同理 這次i=1每位新爸爸 一輪結束後 都可以多出八個人 所以 就又多出了 9x8 ↑九個當父親 依此類推 又 i=2 多出了 [9+(9x8)]x8 ^^^^^^^^^ ↑ 框框內的數字 都當父親 所以答案是 9 + 9x8 + [9+(9x8)]x8
ref:批批踢實業坊
沒有留言:
張貼留言