Linux 板


LINE

最近小弟在讀OS, 用C++在ubuntu上做了一些練習, 發現一個很奇怪的地方 code1跟code2差別在else statement, 其中1代表一個process(包含test2自己) 但code1只是多了一個else卻造成output有8個1(比code2多了2個), stack overflow 上面也沒有類似例題, 想了滿久也不確定是什麼機制造成else那邊會再多生出2個 process, 先謝謝大家 [Code1_output: 11111111] void test2(){ int i; fork(); if(fork()>0){ fork(); } else if(fork()==0){} cout<<" 1 "; //輸出一個1代表1個process } [Code2_output: 111111] void test2(){ int i; fork(); if(fork()>0){ fork(); } // else if(fork()==0){} cout<<" 1 "; //輸出一個1代表1個process } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.40.176
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Linux/M.1500799347.A.B73.html ※ 編輯: j611062000 (111.251.40.176), 07/23/2017 16:44:42
1F:→ silentazure: if那一層fork的return值 < 07/23 19:21
2F:推 yupog2003: 建議可以畫個圖說明一下你的思考模式 07/23 21:26
3F:→ yupog2003: 這樣板友比較好幫你找問題點 07/23 21:26
4F:推 a0919610611: 進 if 判斷那個 fork()==0 的 fork 也會執行呀 07/23 22:35
5F:推 Bencrie: 8 個 6 個沒錯啊 07/24 00:19
6F:→ 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
7F:→ j611062000: 已更新 07/25 10:42







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP