[理工] 資工os

看板Grad-ProbAsk作者 (態度)時間15年前 (2010/10/20 21:43), 編輯推噓8(8022)
留言30則, 6人參與, 7年前最新討論串1/1
How many processes including the original process will the following C program with the unix system call fork() create? int main(){ int i; for(i=0;i<3;i++){ if(fork()==0){ fork(); fork(); fork(); } } } 這是今年交大os的的題目 之前有爬文 可是還是看不懂解法 有沒有大大能詳細解說的 感恩>< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.224.78.229

10/20 21:44, , 1F
我看恐龍版上面的題目 也只有介紹簡單的概念
10/20 21:44, 1F
※ 編輯: hunter0904 來自: 61.224.78.229 (10/20 21:46)

10/20 23:02, , 2F
每個fork出來的child都會從parent的fork指令往下做
10/20 23:02, 2F

10/20 23:03, , 3F
第一個fork出來的child只會fork兩個
10/20 23:03, 3F

10/20 23:03, , 4F
第二個fork出來的只會fork一個
10/20 23:03, 4F

10/20 23:04, , 5F
第三個fork出來的就不做fork了
10/20 23:04, 5F

10/20 23:04, , 6F
以上是指parent做一次loop時發生的事
10/20 23:04, 6F

10/20 23:41, , 7F
請問 parent在這期間都不會做事嗎
10/20 23:41, 7F

10/20 23:43, , 8F
我指1次Loop中
10/20 23:43, 8F

10/20 23:45, , 9F
沒有wait這個指令 我想是交錯的 此題應該不影響
10/20 23:45, 9F

10/21 00:00, , 10F
感謝樓上
10/21 00:00, 10F

10/21 07:57, , 11F
答案是729吧 我大概了解 有空再來打詳細點
10/21 07:57, 11F

10/21 08:47, , 12F
!! 沒注意到if (fork() == 0) 這行
10/21 08:47, 12F

10/21 13:39, , 13F
729+1
10/21 13:39, 13F

01/25 12:26, , 14F
同2樓說的 parent用fork()生出來的child會從fork()繼
01/25 12:26, 14F

01/25 12:27, , 15F
續往下做,所以i=0時,執行 fork()==0,這裏fork生下
01/25 12:27, 15F

01/25 12:31, , 16F
而fork()則分別return parent他的child的pid(不為0)
01/25 12:31, 16F

01/25 12:31, , 17F
續往下做,所以i=0時,執行 fork()==0,這裏fork生下
01/25 12:31, 17F

01/25 12:31, , 18F
生下第一個child 而fork()則分別return parent他的
01/25 12:31, 18F

01/25 12:32, , 19F
child的pid(不為0) 同時return給child 0,所以child會
01/25 12:32, 19F

01/25 12:34, , 20F
進入{fork();fork();fork()}。第一次fork時生下一個
01/25 12:34, 20F

01/25 12:36, , 21F
一個child(1+1-->1+2); 第二個fork()時, 後面兩個
01/25 12:36, 21F

01/25 12:36, , 22F
child各生下一個,所以現在(1+2-->1+4);第三次fork()
01/25 12:36, 22F

01/25 12:37, , 23F
時,後面四個都再生一個,所以(1+4-->1+8),執行完
01/25 12:37, 23F

01/25 12:37, , 24F
i=0後,共有9個process。同理, i=1時,這9個分別再生
01/25 12:37, 24F

01/25 12:38, , 25F
出9*8=72個,i=1結束共有9+9*8=81個; i=2時生下81*8
01/25 12:38, 25F

01/25 12:39, , 26F
=648個。i=2結束,共有81+648=729個。程式結束。
01/25 12:39, 26F

01/25 13:04, , 27F
i=0時簡易示意圖 http://imgur.com/44k3Vte
01/25 13:04, 27F

08/09 10:47, , 28F
08/09 10:47, 28F

09/11 14:01, , 29F
同2樓說的 paren https://daxiv.com
09/11 14:01, 29F

12/15 00:26, 7年前 , 30F
//daxiv.com https://noxiv.com
12/15 00:26, 30F
文章代碼(AID): #1Cll7ibj (Grad-ProbAsk)