int main(int argc, char* argv[])
{
for (int i = 0; i < 3; i++) {
printf("a\n");
fork();
}
return 0;
}
第一次循环:先打印一个a
,fork()
调用后会产生两个进程,一个父进程,一个子进程
第二次循环:每个进程先分别打印一个a
,然后再分别产生两个进程
第三次循环:此时共有4个进程,每个进程先分别打印一个a
,并产生两个进程
下面程序呢?为什么?
int main(int argc, char* argv[])
{
for (int i = 0; i < 3; i++) {
printf("a");
fork();
}
return 0;
}
第一次循环:先向stdout缓冲中写入一个字符a,调用frok()
,并产生两个进程
第二次循环:在每个进程的stdout缓冲区中会先存放上一次循环产生的一个a,
然后在本次循环中在输入一个a。此时每个stdout缓冲区中有两个a
接着每个进程在调用fork(),分别再产生两个进程,此时有4个进程
第三次循环:在4个进程的stdout缓冲区中分别有2个a,在向缓冲区中输入一个a,此时共有3个a,
每个进程在调用fork,然后分别产生2个进程,此时共有8个进程,在每个进程的stdout缓冲区中分别有3个a
执行结束,连续输出8个a。
标签:fork,输出,stdout,几个,程序,int,循环,缓冲区,进程 From: https://www.cnblogs.com/notob/p/18122334