关于 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相关推荐

  1. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  2. python最小值函数_Python3 min() 函数详解 获取多个参数或列表中的最小值

    Python3 min() 函数详解 获取多个参数或列表中的最小值 min()函数的主要作用是获取对象中最小的值,参数可以是任何可迭代对象(字符串.列表.元组.字典等),可以是一个参数内的值进行对比, ...

  3. java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

    java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

  4. html跨行使用的属性,HTML表格标记详解4:TD参数中设定跨列跨行属性

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_083074083081084075085087087095083084084067083083082065' ...

  5. 详解Everest 命令行参数【转载】

    详解Everest 命令行参数 Everest是一款著名的硬件识别软件,可以详细的显示出PC每一个方面的信息并输出为多种形式的报告.是笔者非常喜欢的一款硬件识别工具软件,可以说是"装机必备, ...

  6. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  7. JVM从入门到精通(十一): CMS日志详解,G1日志详解,JVM常见参数总结;补充纤程知识

    CMS 日志格式分析 使用CMS:添加参数UserConcMarkSweepGC(CMS+ParNew) CMS常用参数 -XX:+UseConcMarkSweepGC -XX:ParallelCMS ...

  8. linux中group命令详解,linux groupmod命令参数及用法详解

    需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作.接下来是小编为大家收集的linux groupmod命令参数及用法详解,希望能帮到大家. linux groupmod命令参数及用 ...

  9. mysql数据存储过程详解_mysql数据存储过程参数实例详解

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

  10. mysql的top命令参数_linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明...

    top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu.内存的使用)占用状况,类似于 Windows 的任务管理器.top命令的执行结果是一个 ...

最新文章

  1. 十分钟掌握多项式回归:非线性预测
  2. ruby Rspec+jenkins+allure持续集成
  3. 微信小程序实战–集阅读与电影于一体的小程序项目(六)
  4. 20145207 《Java程序设计》第4周学习总结
  5. 经典面试题 之 子数组之和最大值
  6. 微信小程序把玩(十八)picker组件
  7. Go 函数特性和网络爬虫示例
  8. java根据父类找子类_在java中实现多态时,可以通过父类变量引用子类的对象。_学小易找答案...
  9. LeetCode 54. Spiral Matrix
  10. @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
  11. 《产品经理认证(NPDP)知识体系指南》
  12. 记一次外接键盘win键失灵
  13. 解决windows 10电脑插入耳机无声音的问题
  14. Origin怎么画圆形而非椭圆形?
  15. 大数据技术学习带来的思考
  16. 【安卓学习之互动直播】 腾讯云直播 1 - 注册/登录/个人信息
  17. java解析dcm文件到jpg
  18. JST日本压着端子SHD系列线对板连接器的PCB封装库
  19. ccd坏点测试软件,如何检测CCDLCD坏点
  20. Java zip解压工具类

热门文章

  1. 【VBA研究】调用API实现汉字简繁互换
  2. C语言中mac是什么意思,CMAC是什么意思
  3. Linux文件的颜色意义
  4. 造成增长停滞的各种原因
  5. ”此网站尚未经过身份验证“问题的解决办法
  6. hdu 3987 - 最小割最少割边
  7. SimpleFOC调参1-力矩控制
  8. IPV6个人使用,实测电脑ping通联通手机
  9. 我的第一个Python爬虫——谈心得
  10. 两个tplink路由器有线桥接_新版TP-Link路由器有线桥接怎么设置?