fork()打印

调用fork()一次,父进程会返回子进程的pid(大于0),子进程返回0,如果调用失败则返回-1。下面看一下下面都会打印出什么结果。

 

模拟过程应该是下面的图:

第一次循环时,父进程打印一个B,子进程打印一个A,因为子进程和父进程都执行fork()之后的代码,所以第二次的时候,第一个进程会再打印一个A,一个B,第二个进程也会打印一个A,一个B,故一共是打印3个A,3个B。

 

下面来修改一下代码看看结果:

可以看到一共打印了四个A,4个B,???这又是什么原因呢?

扫描二维码关注公众号,回复: 2687073 查看本文章

下面进行分析

当不见”\n”时,是先将数据放入缓冲区中,到最后再从缓冲区中把数据输出到显示器上,故我们会看到4个A,4个B。

再来看一个变形:

会看到打印BAA,因为pintf(“A”)只是将A放入缓冲区中了,而write(1,”B”,1)会直接将B打印出来,之后fork()后就是父子进程分别打印缓冲区中的数据。

猜你喜欢

转载自blog.csdn.net/ShWe_yayaya/article/details/81479568