→ silentazure: if那一層fork的return值 < 07/23 19:21
推 yupog2003: 建議可以畫個圖說明一下你的思考模式 07/23 21:26
→ yupog2003: 這樣板友比較好幫你找問題點 07/23 21:26
推 a0919610611: 進 if 判斷那個 fork()==0 的 fork 也會執行呀 07/23 22:35
推 Bencrie: 8 個 6 個沒錯啊 07/24 00:19
→ kenduest: 題外話思考邏輯是不是應該先 value = fork() 然後來判斷 07/24 09:35
謝謝各位的建議
1.謝謝a大解了我的盲點, 我之前一直沒考慮到,else if 也會執行fork
2.回K大, 的確我看stack overflow上面大家都照你的邏輯這樣寫, 這題純粹只是作業
做變化
3.個人盲點:除了沒考慮到else if 會啟動fork()之外, 也忽略掉有3個children process
的pid值會變成parent.
以下附上我的邏輯
void test2(){
1 int i;
2 fork(); //f1
3
4 if(fork()>0){ //f2
5 fork(); //f3
6 }
7
8 else if(fork()==0){} //f4
9
10 cout<<" 1 "; //輸出一個1代表1個process
}
test2()執行到的行數
2-->生出child f1 (pid=0),
此時process=test()+f1(pid=0)
4-->test() / f1 分別生出一個f2,
此時process=test()+f1(pid=1)+2個f2(pid=0)
5-->test() / f1 均進入if, 各生出f3(pid=0)
此時process=test()+f1(pid=1)+2個f2(pid=0)+2個f3(pid=0)
6-->test()+f1+2個f3 均執行完if, 所以直接跳到10
此時process=test()+f1(pid=1)+2個f2(pid=0)+2個f3(pid=0)
8-->2個f2進入8之前分別再生出f4(pid=0), 且2個f3的pid分別改為1
此時process=test()+f1(pid=1)+2個f2(pid=1)+2個f3(pid=0)+2個f4(pid=0)
所以process總數為8個
※ 編輯: j611062000 (111.251.40.176), 07/25/2017 00:45:17
→ j611062000: 已更新 07/25 10:42