进程的等待和退出

等待和退出实际上是父子进程之间的一种交互,完成子进程的资源回收。

进程等待

wait()系统调用可以用于父进程等待子进程的结束:

关于wait()的实现,实际上是把进程的状态改为 sleep;

  • 子进程结束时通过exit()向父进程返回一个值;
  • 父进程通过wait()接受并处理返回值。

 那么这两者谁先发生呢?先后顺序有什么影响?

1. 当有子进程存活时,父进程进入等待状态,等待子进程的返回结果;当某子进程调用exit()时,唤醒父进程,将exit()返回值作为父进程中wait()的返回值。此时,wait在前,exit在后。

2. 有僵尸子进程等待时,wait()立即返回其中一个值。此时exit()在前,子进程调用exit()来等待父进程处理,父进程的wait()会立即返回这个子进程的值。

exit()是进程在结束时,用它来完成进程资源回收,终止进程的。

 exit()的功能:

  • 将调用参数作为进程的“结果”返回给父进程,方便父进程使用;
  • 资源回收:如打开的文件、分配的内存、释放大部分进程相关的内核数据结构;
  • 检查父进程是否还存活:子进程在执行exit()的时候检查父进程,父进程是在执行wait()时检查子进程。如果存活,那就保留结果直到父进程需要它,子进程进入僵尸状态;如果父进程已经死了,那就释放所有的数据结构和进程结果;
  • 在上一步检查做完之后,会清理所有等待的僵尸进程;

 总的来说就是释放资源 -> 把自己的状态改为僵尸状态 -> 唤醒处于wait状态的父进程回收自己  ->  让处理机切换到其他进程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值