Linux下wait, WIFEXITED, WEXITSTATUS的比较

Linux下wait, WIFEXITED, WEXITSTATUS的比较偶尔翻到了这几个关键字,找到个文章复习了下:“点我”。记录下:wait的函数原型是:#include/*提供类型pid_t的定义*/#includepid_twait(int*status)进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已

大家好,又见面了,我是你们的朋友全栈君。

偶尔翻到了这几个关键字,找到个文章复习了下:
“http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part3/”
。记录下:

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,这个值就毫无意义。

当然,处理进程退出状态的宏并不止这两个,但它们当中的绝大部分在平时的编程中很少用到。
转自http://blog.163.com/kissinger_1984/blog/static/168992520104255263314/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124698.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机常见分辨率及代表机型有哪些_分辨率有哪几种

    手机常见分辨率及代表机型有哪些_分辨率有哪几种320×2404:31.33333HVGA/Half-sizeVGA640×4804:31.33333VGA/VideoGraphicArray/显示绘图阵列800×4805:31.66667WVGA/WideVGA854×48016:91.77916FWVGA/FullWideVGA960×54016:91.777

    2022年8月13日
    11
  • 01背包问题回溯法_回溯法解决01背包问题时间复杂度

    01背包问题回溯法_回溯法解决01背包问题时间复杂度背景0-1背包是非常经典的算法问题,很多场景都可以抽象成这个问题模型。这个问题的经典解法是动态规划。不过还有一种简单但没有那么高效的解法,这里用的回溯算法。0-1背包问题有很多变体,我这里介绍一种比较基础的。我们有一个背包,背包总的承载重量是Wkg。现在我们有n个物品,每个物品的重量不等,并且不可分割。我们现在期望选择几件物品,装载到背包中。在不超过背包所能装载重量的前提下,如何让背包中…

    2022年10月8日
    2
  • pycharm帮助文档_pycharm pytorch

    pycharm帮助文档_pycharm pytorch大家在利用python进行机器学习时,pycharm是一个很不错的IDE。通过这段时间的使用,自己总结了一些使用心得,故试着写下来共勉,不当之处,希望正在阅读的你批评指正。1、pycharm的安装与激活pycharm安装可以根据自己需要在官网上下载,链接http://www.jetbrains.com/pycharm/download/#section=windows。修改h…

    2022年8月28日
    1
  • mybatis log 激活码(注册激活)

    (mybatis log 激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    628
  • 工作日两个日期之间的数

    工作日两个日期之间的数

    2021年9月9日
    68
  • xiao776php,《xiao 776》_xiao 776_NEWS下载网「建议收藏」

    xiao776php,《xiao 776》_xiao 776_NEWS下载网「建议收藏」康平候爷一五一十述说了一遍,因是夏钰之伤在腿上,这段时日无法下榻,他自己已然焦躁得不行。xiao776因此,趋向正常性(normality)的倾向是一种格局的倾向,而格局里面的自我和物体则受制于格局以及格局与其内容的不变联结,这里的内容意指物体和自我。面对阻在他身前的最后一队死士,他疯了一般,浑身爆发出森然的杀意,弯刀过处全是一片飞扬的血肉,守卫渐渐抵挡不住,废宫越来越在眼前。提示:xiao7…

    2022年10月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号