3.12 Including the initial parent process, how many processes are created by the program shown in Figure 3.32?
答案: 共16個進程。
解析:
根據之前所學到的關於fork的知識去畫進程圖, 要注意的一點就是, fork的子進程的程序計數器里的指令和父進程的相同, 所以每次fork之后, 子進程里i的值都會繼續增加。例如, 第一個進程, i=0時, fork的子進程的i會繼續++, 從1開始。 下面是此題的進程圖。
jk
紅色的數字是進程的PID, PID是我當時寫的一個程序得到的, 代碼如下:
1 #include<stdio.h> 2 #include<unistd.h> 3 #include<sys/types.h> 4 5 6 int main() 7 { 8 char p = 'c'; 9 int i; 10 FILE *fp; 11 pid_t pid; 12 printf("%d\n", getpid()); 13 14 15 fp = fopen("data.txt", "a+"); 16 for(i = 0; i < 4; i++){ 17 if(fork() > 0){ 18 printf("%c %d\n", p = 'p', i); 19 } 20 else 21 printf("%c %d\n", p, i); 22 wait(NULL); 23 } 24 fprintf(fp, "%d %d\n", getppid(), getpid()); 25 26 fclose(fp); 27 return 0; 28 }