Linux中的父与子——fork

要了解fork,首先我们需要知道几个概念。

1、缓冲区的刷新方法

(1)方法一:遇到\n自动刷新
printf("hello\n");
(2)使用fflush刷新屏幕
fflush(stdout);

(3)exit刷新

exit是先刷新缓冲区,然后再调用_exit(真正的退出);

_exit直接退出,不会刷新缓冲区;

综上,

printf将内容先写入到缓冲区中,缓冲区刷新到界面(屏幕)上的条件是:
(1)缓冲区放满
(2)缓冲区未满,强制刷新缓冲区到屏幕(方法一:\n;方法二:主动刷新:fflush(stdout));
(3)程序结束时,自动刷新缓冲区:exit方法;

2、 sheel

shell:

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

我们就是通过命令解释器(称为shell)(bash是命令解释器中的一种)和内核和系统进行交互的(Windows通过图形界面进行交互的);例如我们把ls交给bash,bash帮我们运行ls,然后把结果给用户;

 了解了上面的知识接下来我们就开始介绍fork的使用

fork如何复制进程?

fork是把已有的进程复制一份,当然把PCB也复制了一份,然后申请一个PID,子进程的PID=父进程的PID+1;

此时注意:如果父子进程想要做不同的事情,那么我们通过返回值来判断;

 

 下面我们通过一些例子来深入了解fork

1、打印结果?

2、 如果改为printf("A"),打印结果?

3.打印结果?

4.如果改为printf("A\n"),打印结果?

5.打印结果?

6.第7行改为fork()&&fork之后打印结果是多少?

7.把第6题,第7题目的\n去掉影响结果不?

8.打印结果?

9.第1题,第2题先打印再fork结果是什么?

题解:画图解释

1、i=0时复制一个,但是并不运行,i=1时父进程复制一个,子进程复制一个。总共生产6个

2、 因为没有\n,所以a先被放入了缓冲区,直到exit时才释放,所以共生成10个A

 3、打印两个A,因为缓冲区里面有一个;

4、只打印一个A,因为已经打印了,缓冲区没有了;

5、父进程返回值>0,所以||后面的fork不执行

6、 同理,注意短路现象即可;所以打印3个A;

7、不影响;因为是先fork,然后打印的时候放入缓冲区了,但是接着退出了,刷新缓冲区了,所以不影响;

8、先放入缓冲区,然后打印B,然后复制了一个子进程(子进程缓冲区也有一个A),然后父进程退出刷新缓冲区打印A,子进程也退出刷新缓冲区打印A;所以结果是BAA;

9、

  • 43
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值