详解wait/waitpid的参数:status
关于 wait 与 waitpid 中的参数:status
用到的代码:
1 #include<stdio.h>2 #include<stdlib.h>3 #include<unistd.h>4 #include<sys/wait.h>5 int main()6 {7 pid_t pid = fork();8 if(pid < 0)9 {10 perror("fork error");11 return -1;12 }13 else if(pid == 0)14 {15 sleep(3); 16 exit(1);17 }18 int status;19 while(waitpid(-1,&status,WNOHANG) == 0)//为了等待子进程退出 20 {21 printf("先打一会儿篮球,再去买水喝\n");22 sleep(1);23 }24 if(status & 0x7f)//子进程异常退出时才会进入,这时的(status & 0x7f)>0.25 {26 printf("program error!\n");27 return -1;28 }29 printf("exit child code:%d\n",((status >> 8)&0xff));30 while(1)31 {32 printf("------\n");33 sleep(1);34 }35 return 0;36 }
status 参数是一个输出型参数,由操作系统填充。 如果传递NULL,表示不关心子进程的退出状态信息。如果不为空, 操作系统会根据该参数,将子进程的退出信息反馈给父进程。
虽然 status 是一个 int ,但是它的高两个字节根本没有用到,所以我们只研究status低16位。在低16位中,其中:
status的低16位的高8位保存子进程的返回值,如果我们想要获取子进程的返回值,就是说要获取低16位的高八位。(如果子进程正常退出(exit) —则高8位是子进程的返回值,低8位中的低7位是0):
为了验证子进程正常退出时候的高8位的返回值 与 低7位的值(此时是 0):
status的低16位的低8位中保存子进程异常退出的信号值,其实也只用到了其中的低7位,如果我们想要获取子进程的异常退出信号值,就是说要获取低16位的低7位。(如果子进程异常退出—则高8位的子进程的返回值是0,低8位中的低7位的异常退出信号值不为0):
为了验证子进程异常退出时低7位所给出的结果,在程序运行后,我将 kill 子进程,程序的运行后结果为:
上述是我们分析的过程,但是为了更加方便我们获取子进程退出的返回值,系统给我们提供了宏函数来更加方便的获取;
子进程正常退出,获取返回值为 1:
可见,这样获取更加方便!!!
详解wait/waitpid的参数:status相关推荐
- python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...
Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...
- python最小值函数_Python3 min() 函数详解 获取多个参数或列表中的最小值
Python3 min() 函数详解 获取多个参数或列表中的最小值 min()函数的主要作用是获取对象中最小的值,参数可以是任何可迭代对象(字符串.列表.元组.字典等),可以是一个参数内的值进行对比, ...
- java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
- html跨行使用的属性,HTML表格标记详解4:TD参数中设定跨列跨行属性
this.p={ m:2, b:2, loftPermalink:'', id:'fks_083074083081084075085087087095083084084067083083082065' ...
- 详解Everest 命令行参数【转载】
详解Everest 命令行参数 Everest是一款著名的硬件识别软件,可以详细的显示出PC每一个方面的信息并输出为多种形式的报告.是笔者非常喜欢的一款硬件识别工具软件,可以说是"装机必备, ...
- python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...
Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...
- JVM从入门到精通(十一): CMS日志详解,G1日志详解,JVM常见参数总结;补充纤程知识
CMS 日志格式分析 使用CMS:添加参数UserConcMarkSweepGC(CMS+ParNew) CMS常用参数 -XX:+UseConcMarkSweepGC -XX:ParallelCMS ...
- linux中group命令详解,linux groupmod命令参数及用法详解
需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作.接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家. linux groupmod命令参数及用 ...
- mysql数据存储过程详解_mysql数据存储过程参数实例详解
MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...
- mysql的top命令参数_linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明...
top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu.内存的使用)占用状况,类似于 Windows 的任务管理器.top命令的执行结果是一个 ...
最新文章
- 十分钟掌握多项式回归:非线性预测
- ruby Rspec+jenkins+allure持续集成
- 微信小程序实战–集阅读与电影于一体的小程序项目(六)
- 20145207 《Java程序设计》第4周学习总结
- 经典面试题 之 子数组之和最大值
- 微信小程序把玩(十八)picker组件
- Go 函数特性和网络爬虫示例
- java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...
- LeetCode 54. Spiral Matrix
- @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
- 《产品经理认证(NPDP)知识体系指南》
- 记一次外接键盘win键失灵
- 解决windows 10电脑插入耳机无声音的问题
- Origin怎么画圆形而非椭圆形?
- 大数据技术学习带来的思考
- 【安卓学习之互动直播】 腾讯云直播 1 - 注册/登录/个人信息
- java解析dcm文件到jpg
- JST日本压着端子SHD系列线对板连接器的PCB封装库
- ccd坏点测试软件,如何检测CCDLCD坏点
- Java zip解压工具类