原文地址:http://blog.163.com/kissinger_1984/blog/static/168992520104255263314/

wait的函数原型是:

 #include <sys/types.h> /* 提供类型pid_t的定义 */ #include <sys/wait.h> pid_t wait(int *status)

进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。

参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就象下面这样:

 pid = wait(NULL); 

如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置为ECHILD。

如果参数status的值不是NULL,wait就会把子进程退出时的状态取出并存入其中,这是一个整数值(int),指出了子进程是正常退出还是被非正常结束的(一个进程也可以被其他进程用信号结束,我们将在以后的文章中介绍),以及正常结束时的返回值,或被哪一个信号结束的等信息。由于这些信息被存放在一个整数的不同二进制位中,所以用常规的方法读取会非常麻烦,人们就设计了一套专门的宏(macro)来完成这项工作,下面我们来学习一下其中最常用的两个:

1,WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。

(请注意,虽然名字一样,这里的参数status并不同于wait唯一的参数--指向整数的指针status,而是那个指针所指向的整数,切记不要搞混了。)

2,WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。

当然,处理进程退出状态的宏并不止这两个,但它们当中的绝大部分在平时的编程中很少用到。

wait,、WIFEXITED和WEXITSTATUS介绍相关推荐

  1. system函数,WIFEXITED和WEXITSTATUS

    1,在程序中,用exit来设置进程的退出值时,虽然该函数的参数类型为int型,但再父进程中只能取到其值的低8位.所以用exit返回值时,高于255的值是没有意义的. 2,对于system函数,返回值是 ...

  2. WEXITSTATUS与WIFEXITED

    wait()的函数原型是: #include <sys/types.h>   #include <sys/wait.h>  pid_t wait(int *status) 进程 ...

  3. 父进程等待子进程终止 wait, WIFEXITED, WEXITSTATUS

    wait()的函数原型是: #include <sys/types.h>   #include <sys/wait.h>  pid_t wait(int *status) [一 ...

  4. Linux进程创建fork、进程退出exit()、进程等待waitpid()

    虽然通过标题,我们就轻易的知道了这三个函数的作用,可是,你真的了解这几个函数码?下面让我们来看看这三个函数到底有什么! 一.进程创建fork() 首先,我们来看一看fork()的函数声明: #incl ...

  5. Linux——详解进程控制之等待

    进程等待是进程控制中非常重要的一环,这关系着多进程之间的联动. 目录 一.概念 二.wait 三.waitpid (一).  pid_t pid (二).  int* status ※ ①退出码 ②退 ...

  6. Android Recovery升级原理

    文章目录 Android Recovery升级原理 声明 摘要 1. Recovery相关概念 2. Android系统的启动模式 2.1 Android 各个分区介绍 2.2 Android的启动模 ...

  7. 【教程】制作能在ARM板上直接运行的gcc本地编译器

    编译好的程序的下载链接:百度网盘 请输入提取码(提取码:ocmm) 概述 通常情况下,我们是在电脑里面开一个Linux虚拟机, 在虚拟机里面用交叉编译工具链编译好可执行文件后,将可执行文件拷贝到板子里 ...

  8. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  9. Android OTA 升级

    原文:http://fanwei51880.blog.163.com/blog/static/32406740201172325219944/ Android OTA升级之一:编译升级包 作者: 宋立 ...

最新文章

  1. C++ 泛型编程 -- 函数模版
  2. 自监督学习和对比学习
  3. 关于H3C路由配置VLAN的问题
  4. WebApi项目创建CURD
  5. Spring Boot基础
  6. Notepad++软件的下载与安装步骤(图文详解)
  7. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  8. JQuery中操作Css样式
  9. python多级目录import_Python之路---包和模块
  10. 国务院通过大数据发展行动纲要
  11. 一文了解新营销,数字经济时代如何以个人为中心重建品牌?
  12. 微信小程序地图插件使用
  13. 文本如何垂直居中?多行文本如何实现上下居中?
  14. shell的logo含义_华为logo的寓意是什么
  15. php开发公众号 token验证失败 其中一个原因
  16. 对马哥教育的第一周感悟
  17. 14_单引号和双引号
  18. 计算机瑞士留学经验,瑞士留学生活分享
  19. HIVE如何进行随机抽样
  20. java基础系列十七(时间日期转换)

热门文章

  1. 基于canny边缘检测、形态学、区域统计实现MATLAB的纽扣计数
  2. [IOS]How to use J2Objc
  3. 怎么弄服务器里面的无限方块,乐高无限如何无限刷方块 无限刷方块的方法
  4. 微信小程序传递数组给服务器,微信小程序页面间的数组如何传递
  5. 苹果CMS10播放地址及图片批量替换
  6. MotionEvent详解
  7. 使用koa和phantom.js 搭建一个html转pfd的服务
  8. 逻辑思维和形象思维能力的并行
  9. TOM企业邮箱——外贸企业邮箱第一品牌
  10. Docker数据持久化