1.等待子进程系统调用 wait() 执行如下动作:1.如果调用进程并无之前未被等待的子进程终止,调用将一直阻塞,直到某个子进程终止。如果调用时已有子进程终止,wait() 则立即返回。2.如果 status 非空,那么关于子进程如何终止的信息则会通过 status 指向的整型变量返回。3.内核将会为父进程下所有子进程的运行总量追加进程 cpu 时间以及资源使用数据。4.将终止子进程的ID作为 wait() 的结果返回。2.waidpid(pid_t pid, int *status, int options)1.如果 pid > 0, 表示等待进程ID 为 pid 的子进程2.如果 pid = 0, 则等待与调用进程(父进程)同一个进程组的所有子进程3.如果 pid < -1, 则会等待进程组标识符与 pid 绝对值相等的所有子进程4.如果 pid = -1, 则会等待任意子进程。3.waitid();waitid() 与 waitpid() 最显著的区别在于,对于应等待的子进程事件,waitid() 可以更为精准的控制。4.wait3(),wait4()wait3, wait4 执行与 waitpid 类似的工作。主要语义区别在于, wait3 和 wait4 在参数 rusage 所指向的结构中返回终止子进程的资源使用情况。5.孤儿进程与僵尸进程父进程与子进程的生命周期一般不同,所以引出2个问题:1.谁会是孤儿进程的父进程? 进程 ID 为 1 init 会接管孤儿进程。换言之,某一子进程调用 getppid() 返回1,可以判断父进程是否存在。2.父进程在执行 wait 之前,子进程已经终止。系统仍然允许父进程调用 wait 获取该子进程是如何终止的。内核通过将子进程转化为僵尸进程来处理这种情况。这也意味着将释放子进程所把持的大部分资源,以便其他进程重新使用。该进程所唯一保留的便是内核进程表中的一条记录,其中包含了子进程的ID,终止状态,资源使用数据等。如果父进程未使用 wait 而退出,那么 init 进程将接管子进程并自动调用 wait,从而从系统中移除僵尸进程。如果父进程创建了一个子进程,但并未执行 wait,那么在内核的进程表中将为该子进程永远保留一条记录。如果存在大量此类僵尸进程,那么它们势必将填满内核进程表,从而阻碍新进程的创建。唯一的方法是,杀掉它们的父进程,此时 init 进程会接管和等待这些僵尸进程,从而从系统中将它们清楚。在设计长生命周期的父进程,父进程应该执行 wait 方法,以确保系统总是能够清楚那些死去的子进程,避免成为长寿僵尸。6.SIGCHLD 信号无论一个子进程何时终止,系统都会向其父进程发送 SIGCHLD 信号。如果相继有2个子进程终止,即产生了2次 SIGCHLD 信号,父进程也只能捕获一次。结束是,父进程的 SIGCHILD 信号处理程序每次只调用一次 wait(), 那么一些僵尸进程将成为漏网之鱼。解决方案:在 SIGCHILD 处理程序内部循环以 WNOHANG 标志来调用 waitpid() ,直至再无其他终止子进程需要处理为止。while( waitpid(-1, NULL, WNOHANG) > 0 )continue;上述循环会一直持续,直到 waitpid() 返回0,表明再无僵尸子进程存在。

26.Linux/Unix 系统编程手册(上) -- 监控子进程相关推荐

  1. linux/unix系统编程手册11-15

    title: linux/unix编程手册-11_15 date: 2018-05-27 11:53:07 categories: programming tags: tips linux/unix编 ...

  2. Linux/Unix系统编程手册 第三章:系统编程概念

    本章介绍系统编程的基础概念和一些后续章节用到的函数及头文件,并说明了可移植性问题. 系统调用是受控的内核入口,通过系统调用,进程可以请求内核以自己的名义去执行某些动作,比如创建子进程,执行I/O操作, ...

  3. Linux/UNIX系统编程手册gg

    Linux系统: "所见皆文件" 一个比较好的博客 一.Linux基础操作 Linux系统目录: bin:存放二进制可执行文件 boot:存放开机启动程序 dev:存放设备文件: ...

  4. Linux/Unix系统编程 五:进程

    进程是一个可执行程序的实例. 一.linux系统进程管理 1.进程管理的作用 判断机器健康状态 查看系统中所有进程 杀手进程 2.查看系统进程 1.ps -aux BSD操作系统格式: TTY说明: ...

  5. Linux系统编程手册-源码的使用

    Linux系统编程手册-源码的使用 转自:http://www.cnblogs.com/pluse/p/6296992.html 第三章后续部分重点介绍了后面章节所要使用的头文件及其实现,主要如下: ...

  6. 5w字总结 Unix系统编程学习笔记(面试向)(Unix环境高级编程/Unix环境程序设计)

    文章目录 一.计算 C语言的数据表示与处理 计算 C语言的基本运算操作 内存表和符号表 类型转换 函数类型的分析 指令 复合指令 句法 函数 函数激活(Activation Record) 函数激活定 ...

  7. ①Linux简明系统编程(嵌入式公众号的课)---总课时12h

    10.09 注意:这个是Linux高级编程的简明教程,是Linux应用程序的开发,而不是底层程序的开发. 内容是关于操作系统和网络编程的吗? Linux简明系统编程 〇.课程思维导图 〇.会用到的头文 ...

  8. LINUX C系统编程与PYTHON中的时间模块对比

    今天看python时间模块time的时候发现和LINUX系统编程中的时间调用函数基本一样,以前刚好没有好好学习LINUX C编程的时间模块就对比进行了学习. 本文只是给出函数接口和使用方式,详细了解请 ...

  9. 【Linux】系统编程之文件(标准I/O库)

    目录 一.文件I/O与标准I/O的区别(open与fopen) 1.来源 2.移植性 3.适用范围 4.文件IO层次 5.缓冲 二.函数fopen.fwrite.fread.fseek.fclose ...

  10. UNIX系统编程(1)

    注:本文来自"网易"博主,仅阅读,学习 第一章:什么是系统编程  UNIX系统编程,简单的说就是"C语言+系统调用(system call)",学会了C语言再知 ...

最新文章

  1. 给计算机专业学生的忠告
  2. HDU 1233 还是畅通工程。
  3. 包含绑定变量的sql进行调优需注意一点
  4. java中的controller_详解Spring Boot中Controller用法
  5. 怎么打散铺铜_装修辅材有哪些?怎么选?元老级工头:照这样去买你家多住50年...
  6. iOS基础 - UIScrollView
  7. 山东新动能软件创新·创业大赛 首场宣讲答疑会顺利举行
  8. 操作系统原理实验报告——进程控制与描述
  9. 威纶触摸屏与三菱D700变频器485通讯程序 自己编写的威纶触摸屏与台达变频器的通讯程序
  10. 机器喵之红黑树(三)
  11. smb服务器速度测试_360路由器做smb服务器各种情况拷贝速度测试外加加装5g网卡...
  12. krpano JS动态切换旋转角
  13. 在计算机网络中集线器的作用是,集线器有什么用 集线器的作用介绍
  14. 【分享】PPT--你不知道的使用技巧
  15. 网络三维虚拟展馆开发优势
  16. 公司注册涉及前置审批和后置审批的经营范围有哪些(2019年上海最新版)
  17. 可免费编辑 PDF 内容的 7 大 PDF 编辑工具
  18. git bash shell 脚本 :从文件获取git仓库列表 git clone所有仓库
  19. 美加州将遭太平洋风暴侵袭 警方要求部分民众撤离
  20. 怎么更换kindle 4的字体?zz

热门文章

  1. (第十一周)规格说明书练习作业——吉林市一日游
  2. 完美解决Win8声卡爆音破音、卡顿
  3. Sql 行转换列(列转换行), JavaScript解决思路
  4. 我的web2.0作品:畅想网络应用系统(采用JavaScript、Jquery、Ajax 等制作,完成时间10天)...
  5. 包邮送几本Python和R语言的数据分析挖掘书籍
  6. JavaWeb学习之三层架构实例(二)
  7. POJ 2976 Dropping tests | 01分数规划
  8. tomcat启动报错:java.lang.NoClassDefFoundError
  9. LSOF 安装与使用
  10. 并行分布式运维工具pdsh