回收子进程

本文详细介绍了如何使用wait和waitpid函数回收子进程,并通过宏函数判断子进程的退出状态,包括正常结束、异常终止及暂停状态。同时,讲解了如何获取进程的退出值或终止信号。

回收子进程的函数:

pid_t wait(int *status);//成功:清理掉的子进程ID;失败:-1(没有子进程)

当进程终止时,操作系统的隐式回收机制会:1.关闭所有文件描述符2.释放用户空间分配的内存。内核的PCB仍存在。其中保存该进程的退出状态。(正常终止——>退出值;异常终止——>终止信号)

可使用wait函数传出参数status来保存进程的退出状态。借助宏函数来进一步判断进程终止的具体原因。宏函数可分为如下三组:

1.WIFEXITED(status)为非0 ——>进程正常结束
WEXITSTATUS(status)如上宏为真,使用此宏——>获取进程退出状态(exit的参数)

2.WIFSIGNALED(status)为非0——>进程异常终止
WTERMSIG(status)如上宏为真,使用此宏——>取得使进程终止的那个信号的编号。

3.WIFSTOPPED(status)为非0——>进程处于暂停状态
WSTOPSIG(status)如上宏为真,使用此宏——>取得使进程暂停的那个信号的编号。
WIFCONTINUED(status)为真——>进程暂停后已经继续运行

waitpid函数
作用同wait,但可指定pid进程清理,可以不阻塞
pid_t waitpid(pid_t pid,int * status,int options);成功:返回清理掉的子进程ID:失败:-1(无子进程)
特殊参数和返回情况:
参数pid:
大于0回收指定ID的子进程
负一回收任意子进程(相当于wait)
0回收和当前调用waitpid一个组的所有子进程
小于负一回收指定进程组内的任意子进程

返回0:参3为WNOHANG,且子进程正在运行。

注意一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。

任务描述 本关任务:根据流程图和参考程序,完成模拟内存分配和回收过程。内存空间大小为100,进程数为5,每个进程所需空间为随机产生,大小为1~20,编制程序,首先对5个进程进行内存分配,然后回收指定的进程空间,并进行适当的空闲分区合并操作,要求每次操作结束后都能显示当前的内存分配情况。 相关知识 为了完成本关任务,你需要掌握: 实验原理 如何定义内存块; 分配内存流程; 回收内存流程。 实验原理 使用一个链表来模拟内存存储空间,建立内存块来记录内存分配使用情况,通过随机产生进程及其所需要的内存来模拟真实的进程。通过给进程分配内存及回收来实现动态分区分配存储管理方法。 初始化:链表中只有一个节点,代表整个内存空间,大小为100,起始地址为0,使用标志为0(表示空闲)。 分配阶段:对于进程(5个)及其随机产生的需求空间(每个进程需求空间1~20),从链表中第一个节点所指示的可用内存中进行分配,即进行节点的创建和插入以及相关参数的修改。 回收阶段:要求用户输入指定回收的进程空间,根据用户指定的进程名,进行单链表查找,定位到指定进程所代表的节点后,再判断本次要回收的进程内存空间其左右节点是否为空闲块,如若是,则需要进行空闲块合并,在程序里则需要进行节点删除和相关参数的修改。如果不是,则直接修改对应节点参数即可。 图示说明: 假设内存空间初始阶段为100,进程数为5,每个进程随机产生的内存需求空间为15,14,17,18,12。则表示内存中各内存块的链表变化过程为: 分配阶段 初始状态: 进程1申请大小为15的内存空间,为其分配后: 进程2又申请大小为14的内存空间,为其分配后: 进程3又申请大小为17的内存空间,为其分配后: 进程4又申请大小为18的内存空间,为其分配后: 进程5又申请大小为12的内存空间,为其分配后: 回收阶段: 假设回收进程内存空间的顺序3,2,4,1,5。则内存中链表的变化过程为: 如何定义内存块 如上面图示所示,对于内存块数据结构的定义,其包括参数 ①进程名name; ②起始地址 address; ③长度 length; ④标志 flag,表示该块是否被分配。 于是,内存块被定义为结构体: struct MEMORY_BLOCK { i
最新发布
05-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值