貌似是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个-。