Linux 进程:进程退出返回值的获取
创始人
2024-05-28 21:09:27
0

目录

  • 一、对输出参数status的理解
  • 二、获取进程退出返回值
    • 1.位运算
      • (1)异常退出码
      • (2)进程返回值
    • 2.宏函数

  我们常使用函数 waitwaitpid 来执行进程等待的功能:处理退出的子进程并释放资源,防止子进程变成僵尸进程。而这两个函数都有一个输出参数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字节。

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)相与得到进程返回值。

右移8位

2.宏函数

   WIFEXITED(status) 等价于 ( (*status)&(0x7f) )==0 ,当异常退出码是0,宏函数返回true,表示进程的退出返回值有意义,可以去获取。

  WEXITSTATUS(status) 等价于 ( (*status >> 8)&(0xff) ),这样直接就可以得到进程的退出返回值。

相关内容

热门资讯

古刹袅袅初三作文1000字【... 古刹袅袅初三作文1000字 篇一古刹袅袅初三作文1000字古刹袅袅,岁月流转间,承载着古老而庄严的历...
初三毕业的作文800字(实用... 初三毕业的作文800字 篇一初三毕业,离别之际,心情复杂。回首这三年的初中生涯,我不禁感慨万分。初三...
遇见未来作文800字初三【精... 遇见未来作文800字初三 篇一未来,是一个神秘而又充满想象的词。当我们谈论未来时,脑海中浮现的可能是...
约定,三年后实现-初三作文【... 约定,三年后实现-初三作文 篇一约定,三年后实现我和我的好朋友小明是从小一起长大的,我们的友谊可以说...
初三成长励志作文(精简6篇) 初三成长励志作文 篇一:磨砺初心,迈向成功初三,对于每个初中生来说,是一个关键的阶段。在这一年里,我...
数学与物理(精彩3篇) 数学与物理 篇一数学和物理是两门密不可分的学科,它们之间相辅相成,互相促进着科学的发展。数学为物理提...
我多想轻轻地抱着你初三抒情作... 我多想轻轻地抱着你初三抒情作文 篇一初三,是人生中一个特殊的阶段。在这个阶段里,我们经历了许多变化和...
九年级开学季作文【通用6篇】 九年级开学季作文 篇一我的新学期计划新学期开始了,我对未来的九年级生活充满了期待和憧憬。在这个关键的...
初三下学期新学期新打算作文6... 篇一:初三下学期新学期新打算新的学期开始了,对于我来说,这是一个全新的开始,一个全新的机会去追求我的...
弟弟对不起作文300字【通用... 篇一:弟弟对不起我是一个有一个比我小四岁的弟弟的姐姐。在我和弟弟的相处中,难免会有矛盾和冲突,但最近...
亲情类初三700字作文大全(... 亲情类初三700字作文大全 篇一家,是我最温暖的港湾家,是我最温暖的港湾。在这个喧嚣的世界里,家是我...
感恩的花开在成长的路上初三作... 感恩的花开在成长的路上初三作文 篇一感恩是一种美好的情感,它让我们在成长的路上更加坚定和幸福。每个人...
九年级我该怎么过700字作文... 九年级我该怎么过700字作文 篇一九年级对于我来说是一个非常重要的阶段,它标志着我即将迈入高中的大门...
知恩初三作文【精彩3篇】 知恩初三作文 篇一:感恩父母作为一个初三学生,我深刻地意识到自己应该对父母心怀感恩之情。他们是我成长...
初三漂流作文800字(优质6... 初三漂流作文800字 篇一初三漂流这个寒假,我和几个好朋友决定去体验一次漂流的刺激。我们选择了一个位...
初三家教手册:给儿子成长的机... 初三家教手册:给儿子成长的机会 篇一家庭教育是孩子成长过程中至关重要的一环。特别是对于初三的孩子来说...
九年级你好作文700字【最新... 九年级你好作文700字 篇一初中生活的收获与感悟初中生活即将结束,回首这三年的时光,我仿佛看到了一幅...
初三100多字的优美句子【精... 初三100多字的优美句子 篇一初三,是我们人生中一个重要的阶段。这个阶段的我们正在开始追寻自己的梦想...
向目的地进发初三作文800字... 向目的地进发初三作文800字 篇一目的地,是每个人心中的追求和向往。初三,是每个中学生成长的关键时期...
美味寿司初三作文(最新3篇) 美味寿司初三作文 篇一:探寻寿司的魅力寿司,是一道源自日本的美食,以其精致的制作工艺和独特的口感,在...