作者Lsilver (LS)
看板Grad-ProbAsk
標題Re: [理工] 101交大OS
時間Sun Nov 25 01:46:17 2012
看了前幾天版友問的這題,回文有點混亂,自己大概算出了答案
把自己想法寫出來,順便想確定一下自己的概念對不對(有錯請糾正我)
#include <stdio.h>
main()
{
char buffer[1024]="";
int i,pid;
if(fork()==0)stract(buffer,"a"); //1號fork
fork();stract(buffer,"b"); //2號fork
if(fork()>0){ //3號fork
stract(buffer,"c");
printf("%s\n",buffer);
fflush(NULL);
}
}
求印出的abc個數
[我的想法]
P0
/ | \
P1 P2 P3
/ \ |
P12 P13 P23
|
P123
P0代表父代
Px x代表由程式第幾個fork所生出
(例.P12即 由第1號fork生出的子代,再經2號fork所生出,就是第三代)
P0, 印bc
P1,P12 印abc
P2 印bc 所以總共2a,4b,4c
P3,P23,P13,P123其他因為這些process新成功fork出來的此時回傳0 不符合>0所沒印
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.35.165.111
推 mingcloud:我題外話一下...是 strcat 可以自己跑程式看看 11/25 21:26
推 sting47:不太對喔 會印出的分別是P0-bc P1-abc P12-abc P2-bc 11/25 22:20
→ sting47:第三個fork是if是parent process才會執行裡面的statements 11/25 22:20
→ sting47:至於最後一段 我想是複製整份code跟program counter 也就 11/25 22:22
→ sting47:是 是複製要從"第幾行"開始繼續執行這樣 11/25 22:23
※ 編輯: Lsilver 來自: 111.242.26.72 (11/26 22:52)
→ Lsilver:了解了~ 感謝!! 這樣修改希望正確了 11/26 22:53