首先,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