首先,fork()系統調用的特性:緩存
1 int main(){ 2 int i; 3 for( i=0;i<2;i++){ 4 fork(); 5 printf("#"); 6 } 7 return 0; 8 }
該結果輸出8個#而非6個,緣由是fork()函數的第二個特性,父進程printf()函數的緩存區被複制到子進程的空間,所以多了兩個#。函數
只要把printf("#")改爲printf("#\n") 或者加一句fflush(stdout) 結果就是6.spa
注意,該進程一共產生了3個子進程,共計四個進程。code
那麼,把for循環中的2改爲3 會輸出多少個#呢?blog
答案是24個! 一共有8個進程。進程
1 int main(){ 2 int i; 3 printf("halo\n"); 4 for( i=0;i<3;i++){ 5 fork(); 6 printf("#"); 7 } 8 return 0; 9 }
那麼結果如何呢? 以下所示:for循環
1 halo 2 ########
再看一例:class
1 static int i=0; 2 3 int main(){ 4 i++; 5 fork(); 6 fork(); 7 fork(); 8 sleep(1); 9 printf("%d\n",i); 10 }
結果以下:變量
1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1