Linux环境下wait函数,Linux的exit()和wait()系统调用

本文详细介绍了Linux环境下,进程如何通过exit()退出并进入僵尸状态,以及父进程如何通过wait()回收资源。通过示例代码解释了exit()设置退出码和状态,wait()获取子进程信息的过程,同时阐述了SIG_CHILD信号的角色。文章还讨论了子进程退出后的资源清理,强调了task_struct结构的回收依赖于父进程的wait()调用。
摘要由CSDN通过智能技术生成

Linux的exit()是进程退出用的,wait()则是父进程用来回收已退出的子进程的资源的。

进程已经调用了exit()退出,而父进程还没有调用wait()回收资源的状态,就是僵尸状态(task zombie)。这时该进程已经不能运行,但还占着待回收资源。

先看看这两个函数的man手册介绍,

9d06000a2ec56d3715ec6f029f598e68.png

exit的参数是退出状态码,一般正常退出传0,出错退出传-1,无返回值,因为进程调用了exit()之后就不再返回了。

wait的参数是返回子进程退出状态的指针,是个传出参数,返回值是wait到的子进程的pid。

4c21119a1c19ddb783edf6b70bbe0ece.png

这两个模拟一下。

先给我们的task_t加两个成员变量,exit_code表示进程的退出码,status表示进程的运行状态。

把他们加在结构体的尾部,这样不会影响到之前变量的偏移量。

定义两个进程状态,TASK_RUN和TASK_ZOMBIE,只有TASK_RUN时才可以被调度执行。

定义SIG_CHILD信号,在子进程退出时发送给父进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值