linux fork

来源:互联网 发布:淘宝上的玉石是真的吗 编辑:程序博客网 时间:2024/05/06 23:29

貌似是360的笔试题;

  

#include <stdio.h>

#include <stdlib.h>

  

int main() {

int i;

for (i = 0; i < 4; i++) {

fork();

printf(" - \n");

}

}

  

icode0410@ubuntu:~/Documents/code/linux/process$ gcc forks.c && ./a.out

-

-

-

-

-

-

-

-

-

-

-

-

icode0410@ubuntu:~/Documents/code/linux/process$ -

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

  

总个数为:2 + 4 + 8 + 16 = 30;

  

|

fork

/+1 \+1

fork fork

/+1 \+1 /+1 \+1

fork ….

/+1 \+1

fork

/+1 \+1

  

如果将printf(" - \n"); 给成printf(" - ");呢?

icode0410@ubuntu:~/Documents/code/linux/process$ gcc forks.c && ./a.out

- - - - icode0410@ubuntu:~/Documents/code/linux/process$ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  

总个数为64;

  

通过上面的图可知,最后实际的进程数为16个;又因为没有\n导致printf的缓冲区在进程结束时在会flush,而此时,每个进程的buf都有4个-,所以会打印64个-。

  

  

0 0