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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 我的世界服务器指令大全电脑版_我的世界服务器专用指令

    我的世界服务器指令大全电脑版_我的世界服务器专用指令要成为一个合格的服主,熟悉我的世界服务器指令是必须的,服务器内指令的各种功能不仅是OP需要使用,还有部分是玩家也需要知道的,下面就看看小编为大家准备的我的世界服务器指令大全吧。【大全】我的世界服务器指令大全:首先/manuaddxxgm?如果要使用这个命令,需要自己先有权限在控制台输入manuaddxxadmin然后添加sethome权限manselect世界名字(默认world)输入m…

    2022年9月23日
    1
  • GO分析-GOseq的使用教程[通俗易懂]

    GO分析-GOseq的使用教程[通俗易懂]GOseq的介绍GOseq是一个R包,用于寻找GOterms,即基因富集分析。此方法基于Walleniusnon-centralhyper-geometricdistribution。相对

    2022年8月6日
    6
  • CTK插件框架学习4-创建跨平台插件工程「建议收藏」

    CTK插件框架学习4-创建跨平台插件工程「建议收藏」在上一篇博文中已经实现了一个简单的插件和测试程序的编写,但是插件跟应用是分开独立的工程。实际应用开发中需要把相关的库和头文件打包到一个工程中,如下图所示,这样比较方便调试开发,也为创建跨平台工程提供了便利。此节我们将创建一个初步完整的工程,工程文件中包含应用程序以及要使用的各个插件,同时将各个平台编译后的ctk插件库文件也整合到一起。目前支持如下三个平台:系统CPU编译器说明…

    2022年5月20日
    41
  • 前端vscode必备插件推荐(墙裂推荐)「建议收藏」

    前端vscode必备插件推荐(墙裂推荐)「建议收藏」前言:vscode是一款强大的前端编辑软件,有些人说ws(webstorm)更好用,但是vs重在轻量级啊!!!而且根据自己的开发习惯安装适合自己的插件后,用起来简直不要太舒服了好嘛!!!首先呢,我先推荐的就是最基础的语言包,没办法,英语水平太捞了哈哈哈,弄起来后就舒服多了,汉语yyds~《Chinese(Simplified)(简体中文)Language》注释工具《ColorfulComments》不同的注释符能带来很多高亮的显示快速找到css定义位置并小窗口展示

    2022年7月25日
    11
  • Numpy中Meshgrid函数介绍及2种应用场景

    Numpy中Meshgrid函数介绍及2种应用场景近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法。但总觉得印象不深刻,不是太了解meshgrid的应用场景。所以,本文将进一步介绍Numpy中meshgrid的用法

    2022年7月1日
    17
  • 显示搜索dota2协调服务器,搜索dota2游戏协调服务器中【操作方式】

    显示搜索dota2协调服务器,搜索dota2游戏协调服务器中【操作方式】喜欢使用电脑的小伙伴们一般都会遇到win7系统搜索dota2游戏协调服务器中的问题,突然遇到win7系统搜索dota2游戏协调服务器中的问题就不知道该怎么办了,其实win7系统搜索dota2游戏协调服务器中的解决方法非常简单,按照1:DOTA2服务器蹦了之后,进入DOTA2,发现最顶端先是提示:“搜索DOTA2协调服务器中…”2:然后就是显示:“正在连接至DOTA2游戏协调服务器…”来操作就行了,…

    2022年5月17日
    230

发表回复

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

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