wait,、WIFEXITED和WEXITSTATUS介绍
原文地址: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介绍相关推荐
- system函数,WIFEXITED和WEXITSTATUS
1,在程序中,用exit来设置进程的退出值时,虽然该函数的参数类型为int型,但再父进程中只能取到其值的低8位.所以用exit返回值时,高于255的值是没有意义的. 2,对于system函数,返回值是 ...
- WEXITSTATUS与WIFEXITED
wait()的函数原型是: #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) 进程 ...
- 父进程等待子进程终止 wait, WIFEXITED, WEXITSTATUS
wait()的函数原型是: #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status) [一 ...
- Linux进程创建fork、进程退出exit()、进程等待waitpid()
虽然通过标题,我们就轻易的知道了这三个函数的作用,可是,你真的了解这几个函数码?下面让我们来看看这三个函数到底有什么! 一.进程创建fork() 首先,我们来看一看fork()的函数声明: #incl ...
- Linux——详解进程控制之等待
进程等待是进程控制中非常重要的一环,这关系着多进程之间的联动. 目录 一.概念 二.wait 三.waitpid (一). pid_t pid (二). int* status ※ ①退出码 ②退 ...
- Android Recovery升级原理
文章目录 Android Recovery升级原理 声明 摘要 1. Recovery相关概念 2. Android系统的启动模式 2.1 Android 各个分区介绍 2.2 Android的启动模 ...
- 【教程】制作能在ARM板上直接运行的gcc本地编译器
编译好的程序的下载链接:百度网盘 请输入提取码(提取码:ocmm) 概述 通常情况下,我们是在电脑里面开一个Linux虚拟机, 在虚拟机里面用交叉编译工具链编译好可执行文件后,将可执行文件拷贝到板子里 ...
- 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析
今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...
- Android OTA 升级
原文:http://fanwei51880.blog.163.com/blog/static/32406740201172325219944/ Android OTA升级之一:编译升级包 作者: 宋立 ...
最新文章
- C++ 泛型编程 -- 函数模版
- 自监督学习和对比学习
- 关于H3C路由配置VLAN的问题
- WebApi项目创建CURD
- Spring Boot基础
- Notepad++软件的下载与安装步骤(图文详解)
- Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
- JQuery中操作Css样式
- python多级目录import_Python之路---包和模块
- 国务院通过大数据发展行动纲要
- 一文了解新营销,数字经济时代如何以个人为中心重建品牌?
- 微信小程序地图插件使用
- 文本如何垂直居中?多行文本如何实现上下居中?
- shell的logo含义_华为logo的寓意是什么
- php开发公众号 token验证失败 其中一个原因
- 对马哥教育的第一周感悟
- 14_单引号和双引号
- 计算机瑞士留学经验,瑞士留学生活分享
- HIVE如何进行随机抽样
- java基础系列十七(时间日期转换)