LINUX教程:进程管理之wait和waitpid
《LINUX教程:进程管理之wait和waitpid》要点: 僵尸进程在介绍wait、waitpid和waitid函数之前,首先要介绍一下僵尸进程,因为,这三个函数的本色任务就是处理僵尸进程的问题. 进程会我们的生命体一样,也有消亡.进程在退出时,内核会清理进程几乎所有的资源.例如:内存资源、文件资源、信号量资源、共享内存资源或者引用数减一 又或释放共享内存资源.但还有少量的资源没有被内核清理,例如:进程控制块PCB task_struct、内核栈资源.这些资源没有被释放,是为了保存一些进程退出是的重要信息,例如:进程消耗的系统cpu时间、用户cpu时间;收到了多少信号等待这些信息,类似于“墓志铭”,总结了进程的一生.而wait、waitpid和waitid函数就是来释放这些“墓志铭”信息的.之后进程就脱离了僵尸进程的状态. 过程的僵尸过程的状态,是一种“刀枪不入的状态”,即使是用kill -9 也无法杀死.只能通过wait这些函数活着是通过init过程来“收尸”; 对于创立了很多的子进程的父进程,获取子进程的退出信息是非常有意义的. wait函数函数声明
返回值
由上述返回值的含义,等待所有子进程的退出时,要注意不要丢掉对信号中断情况的考虑,代码如下:
参数阐明wait函数的参数和waitpid函数的参数是一个意思.但waitpid函数对wait函数的局限性做了扩展,所以,在介绍waitpid时,再来讲wait的参数. wait函数的局限性
waitpid函数waitpid函数的声明
返回值返回值和wait函数一样. 参数说明pid参数
pid参数的理解:
内核实现简述内核之中,wait和waitpid函数调用的都是wait4函数.根据pid的值来给wait_ opts结构体变量wo中的wo_type复制,再以实参的形式传参给do_wait函数,do_wait函数来决定等待什么状态的子进程. wait4中的部门代码:
在do_ wait函数中,主要要完成两个人物,第一,父进程中的每个线程都会去遍历子进程,第二,筛选要等待的子进程;在内核中,task_struct成员中children变量是保留子进程链表的链表头,利用list_for_each_enpty函数来遍历.利用eligible_pid函数来筛选. 遍历子过程代码:
筛选子过程的代码:
当waitpid函数参数pid的值为-1时,wo_type的值为PIDTYPE_MAX;其他三种情况由task_pid_type函数来处置. 参数options是一个位掩码,可以同时存在多个标记.当options的值为0时,行为和wait类似. 标记位:
参数status该参数存储的信息时按位存储的,我们没方法解析status的值,只能通过系统提供的宏去解析.这些宏安功能分可以分为两类:获取子进程状态和判断是非由相应信号产生;
没有需要返回使子进程苏醒的信号的值,因为只有唯一一个SIGCONT信号才能使进程又停止状态恢复到执行状态. 本文永远更新链接地址: 更多LINUX教程,尽在脚本之家PHP学院专栏。欢迎交流《LINUX教程:进程管理之wait和waitpid》! (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 休息 – 是否无法使用curl来使用Google Cloud Speech API识
- linux – 关于fork和execve系统调用
- dma_mmap_coherent和remap_pfn_range有什么区别?
- linux – 如何在终端中记住多个选项卡的会话? (同级会议经
- 解决两台centos虚拟机Telnet服务无法联机的问题
- Sed - An Introduction and Tutorial by Bruce Barnett
- linux – 锁定C 11 std :: unique_lock会导致死锁异常
- linux – 使用bash脚本更新CRON
- linux – 用于将文件夹名称复制并添加到多个子目录中的文件
- OpenCV在与anaconda的Linux上使用python无法正常工作.获取未