进程退出与等待

1️⃣ 进程退出

正常终止

  1. main函数的返回
  2. 调用exit
  3. _exit

异常终止

Ctrl + c (信号终止)

1.main函数的返回就是return 0;程序退出这个在高级语言里面就学过了不多说。
2.exit(x)的使用如下
测试1在这里插入图片描述
第一次测试:错误码与main函数里面打印的值。

========================================================================
在这里插入图片描述

在这里插入图片描述
第二次测试:有错误码但是main函数里的printf却没有进行打引。

=========================================================================

在这里插入图片描述
在这里插入图片描述
第三次测试:我们发现也没有打印但也有_exit 的错误码
通过比较我们发现exit与_exit是有区别的。
_exit:直接中止进程,不会有任何刷新操作。
exit:终止进程,刷新缓冲区。
补充说明:echo ¥?是返回上一个命令的状态,0表示没有错误,其它任何值表明有错误。(你没看错就是¥只是博客显示是这样的)

2️⃣ 进程等待

为什么要进程等待?

1.子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。
2.另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。
3.最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对,或者是否正常退出。
4.父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。

3️⃣ 写时拷贝

关于写时拷贝是由os的内存管理模块完成的。
我们打的比方我们的子进程想要用父进程的某部分数据。我们的子进程可以通过页表获取到物理地址。这边有个细节操作系统不会直接给你父进程的地址。会进行拷贝,将拷贝的物理地址给子进程。

为什么需要写时拷贝?
  1. 父进程的数据,子进程不一定全用,即使使用,数据也不一定全部写入。 – 存在空间浪费。
  2. 只有需要修改的数据进行分离拷贝。不需要修改共享数据就可以 – 从技术角度实现复杂。
  3. 如果fork创建子进程,就将全部 数据给子进程,会出现成本增加(内存和时间。就好比我电脑开机时间长短。磁盘需要开启多个开机就开启应用或者加载大量数据的时候会延长开机时间,不像刚刚买的电脑开机速度杠杠的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华华的bit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值