Linux 进程:进程退出返回值的获取
目录
- 一、对输出参数status的理解
- 二、获取进程退出返回值
- 1.位运算
- (1)异常退出码
- (2)进程返回值
- 2.宏函数
我们常使用函数 wait 和 waitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数status,我们可以通过这个输出参数来获取进程的退出返回值。但是进程的退出返回值并不是直接将status解引用就可以得到的,详细原因且看下文。
- pid_t wait(int *status);
- pid_t waitpid(pid_t pid, int *status, int options);
一、对输出参数status的理解
在wait和waitpid中,输出参数status存储了子进程的退出返回值,但是并不是直接解引用就可以得到子进程的退出返回值。
status解引用后是int型变量,占据四个字节的内存空间。但它的四个字节并不是都存储着进程的退出返回值。如图所示:我们给每个字节从高地址到低地址依次编号:1、2、3、4字节。

1、2字节在这里我们用不上,因此不做讨论。
3号字节存储的是子进程的退出返回值,也就是说,只有8个比特位才是用来存储进程退出返回值的。
4号字节的低7位存储异常退出码(当程序异常退出时,异常退出码就可以表示程序是因为什么异常而退出的),如果异常退出码不是0说明进程是异常退出。4字节的最高1位是coredump标志,这里不作讨论。
在获取子进程的退出返回值之前,首先需要获取异常退出码,判断异常退出码是不是0。如果是0,说明是正常退出,可以去获取进程的退出返回值了;如果异常退出码不是0,说明是异常退出,那么就没有必要获取进程的退出返回值了。
二、获取进程退出返回值
我们有两种方式可以获取status中的退出返回值和异常退出码:
- 位运算
- 宏函数
1.位运算
(1)异常退出码
因为异常退出码占用的是4号字节中的低7位,因此我们可以通过(*status)和16进制数(0x7f)进行与运算得到异常退出码。
如图:第一行是status解引用后的数,第二行是0x7f的二进制表示,不管高25位是什么数字,只要和0相与都变成0,而低7位依然保持原样,因此可以得到异常退出码。

(2)进程返回值
进程返回值占用的是3号字节中的8个bit,因此需要把(*status)进行右移8位,如图所示。
这样进程返回值就变成了低8位,然后使用上面的方法,把右移后的数据和16进制数(0xff)相与得到进程返回值。

2.宏函数
WIFEXITED(status) 等价于 ( (*status)&(0x7f) )==0 ,当异常退出码是0,宏函数返回true,表示进程的退出返回值有意义,可以去获取。
WEXITSTATUS(status) 等价于 ( (*status >> 8)&(0xff) ),这样直接就可以得到进程的退出返回值。
相关文章:
Linux 进程:进程退出返回值的获取
目录一、对输出参数status的理解二、获取进程退出返回值1.位运算(1)异常退出码(2)进程返回值2.宏函数我们常使用函数 wait 和 waitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数status&am…...
JavaScript核心高级内容复习1
本节概述 数据类型的分类和判断 基本(值)类型 Number ----- 任意数值 -------- typeofString ----- 任意字符串 ------ typeofBoolean ---- true/false ----- typeofundefined — undefined ----- typeof/null -------- null ---------- 对象(引用)类型 Object ----- typeof…...
2D图像处理:Qt + Opencv使用光度立体法检测Halcon中提供的缺陷图像
文章目录 不需知道光源方向一、光度立体法(后续有时间在查资料研究)1.1 问题1:Slants和Tilts的理解(暂时是理解的)1.2 问题1:Gradient通道数为1,为何像素点对应的值会有两个?1.3 问题2:F(r,c)=(u(r,c),v(r,c)) 关于高斯曲率和平均曲率如何计算的?二、非标定光源实现光…...
怎样用sql去查一个订单表中一个店铺一段时间的营业收入的环比
一:思路 要查询一个订单表中一个店铺一段时间的营业收入的环比,可以按照以下步骤进行操作: 使用SELECT语句选择需要的数据列,如订单日期和订单金额,以及店铺名称列。 使用WHERE语句过滤出指定店铺和时间段的订单数据…...
SpringSecurity: 默认添加的15个Filter是怎么添加进去的?
总的流程分为两部分,一是先用Map把configurer收集起来,然后再把maper中所有的configurer应用到HttpSecurity对象。 其中的map位于AbstractConfiguredSecurityBuilder这个类。 private final LinkedHashMap<Class<? extends SecurityConfigurer&l…...
学习记录---latent code 潜在编码
文章目录参考文献1. 什么是潜在编码?2.什么是潜在空间?3.同类潜在编码的相似性4.潜在编码的应用4.1 Antoencoders4.2 Generative models5.结论个人学习总结,持续更新中……参考文献 [1] 快速理解深度学习中的latent code潜在编码 1. 什么是…...
Cesium三维数据格式以及生产流程详解(glb,osgb,obj,bim,ifc)等
最近收到私信问我在cesium上展示的一些三维数据是如何生产和处理的,这篇文章就给大家一次性讲个透彻。 首先我们来做做分类。市面上能接触到的,常见的,cesium上支持展示的三维数据大致分为以下几种: 1.倾斜摄影(osgb,obj) 2.点云数据(las,pts) 3.手工模型(gltf,…...
2023年备考信息安全工程师每日知识点(1)
信息安全工程师在软考中属于中级认证,难度尚可,如果从今天开始学的话,肯定来得及 作者简介: 吉林师范大学网络空间安全的一名普通的大一学生已于2022年拿到华为阿里腾讯三家认证吉师信网中心的一名可怜打工人华为MindSpore截至目…...
Unity记录3.1-地图-TileMap简单使用、鼠标拖动放置Tile
文章首发及后续更新:https://mwhls.top/4456.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 汇总:Unity 记录 上章的课程接下来是巡逻的敌人…...
Decoupled Knowledge Distillation(CVPR 2022)原理与代码解析
paper:Decoupled Knowledge Distillationcode:https://github.com/megvii-research/mdistiller/blob/master/mdistiller/distillers/DKD.py背景与基于响应logits-based的蒸馏方法相比,基于特征feature-based的蒸馏方法在各种任务上的表现更好…...
IronWebScraper 2023.2.2 Crack
关于 .NET 的 IronWebScraper 用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 是一个 C# 网络抓取库,它允许开发人员模拟和自动化人类浏览行为,以从 Web 应用程序中提取内容、文件和图像作为本机 .NET 对象。Iron…...
【2.1 golong中条件语句if】
1. 条件语句if 1.1.1. Go 语言条件语句: 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。 Go 语言提供了以下几种条件判断语句: 1.1…...
Scala编程(第四版)
Scala编程可伸缩的语言面向对象与函数式编程Scala优势Scala是兼容的可伸缩的语言 1、适合构建将java组件组装在一起的脚本 2、用于编写可复用组件,并讲这些组件构建成大型框架 Scala是一门综合面向对象和函数式编程概念的静态类型编程语言 面向对象与函数式编程 面…...
aws apigateway 基础概念和入门示例
参考资料 https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started.html apigateway基础理解 apigateway的核心概念 apigateway,基础服务用来管理接口的创建,部署和管理restapi,http资源和方法的集合&#…...
2023年“中银杯”安徽省职业院校技能大赛网络安全A模块全过程解析
A模块基础设施设置/安全加固(200分) 一、项目和任务描述: 假定你是某企业的网络安全工程师,对于企业的服务器系统,根据任务要求确保各服务正常运行,并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多种安全策略来提升服务器系统的网络安全…...
【Python入门第二十四天】Python 迭代器
Python 迭代器 迭代器是一种对象,该对象包含值的可计数数字。 迭代器是可迭代的对象,这意味着您可以遍历所有值。 从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 iter() 和 next()。 迭代器 V…...
Qt扫盲-CMake 使用概述
CMake 使用概述一、概述二、创建Qt CMake 项目三、简单介绍1. 引入Qt的库2.Qt CMake 引入第三方库3. Qt CMake 项目目录四、使用案例一、概述 CMake是一个简化跨不同平台开发项目的构建过程的工具。对C来说其实就是生成一个文件,文件里面描述了,怎么组织…...
minGW-w64配置途径
文章目录1 GNU、GCC与minGW2 minGW当前下载方式3 minGW-w64配置途径Step1Step2Step31 GNU、GCC与minGW GNU这个名字是GNUs Not Unix的递归首字母缩写,它的发音为[gnoo],只有一个音节,发音很像"grew",但需要把其中的r音替…...
程序、进程、线程的基本概念、信号量的PV操作、前趋图的PV操作
程序、进程、线程的基本概念 进程控制块PCB的组织方式:顺序方式、链接方式、索引方式、Hash。 在JVM 中进程与线程关系 进程: 拥有资源的独立单位。可以被独立调度。可以分配资源。 线程: 可以被独立调度。同一进程中的多个线程,…...
设计测试用例
目录 测试用例的基本要素 测试用例的设计方法 功能需求测试分析 非功能需求测试分析 设计测试用例的具体方法 测试用例的基本要素 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
