wait()的函数原型是:
#include <sys/types.h>  
#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。
WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。
WEXITSTATUS(status) 当WIFEXITED返回非零值时,我们可以用这个宏来提取子进程的返回值,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用exit(7),WEXITSTATUS(status)就会返回7。请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个值就毫无意义。
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
void f(){
printf("THIS MESSAGE WAS SENT BY PARENT PROCESS..\n");
}
main(){
int i,childid,status=1,c=1;
signal(SIGUSR1,f); //setup the signal value
i=fork(); //better if it was: while((i=fork)==-1);
if (i){
printf("Parent: This is the PARENT ID == %d\n",getpid());
sleep(3);
printf("Parent: Sending signal..\n");
kill(i,SIGUSR1); //send the signal
//status is the return code of the child process
wait(&status);
printf("Parent is over..status == %d\n",status);
//WIFEXITED return non-zero if child exited normally 
printf("Parent: WIFEXITED(status) == %d\n",WIFEXITED(status));
//WEXITSTATUS get the return code
printf("Parent: The return code WEXITSTATUS(status) == %d\n",WEXITSTATUS(status));
} else {
printf("Child: This is the CHILD ID == %d\n",getpid());
while(c<5){
sleep(1);
printf("CHLID TIMER: %d\n",c);
c++;
}
printf("Child is over..\n");
exit(2);
}
}
输出:
Child: This is the CHILD ID == 8158
Parent: This is the PARENT ID == 8157
CHLID TIMER: 1
CHLID TIMER: 2
Parent: Sending signal..
THIS MESSAGE WAS SENT BY PARENT PROCESS..
CHLID TIMER: 3
CHLID TIMER: 4
Child is over..
Parent is over..status == 512
Parent: WIFEXITED(status) == 1 //正常退出
Parent: The return code WEXITSTATUS(status) == 2 //拿到子进程返回值

WEXITSTATUS与WIFEXITED相关推荐

  1. linux网络编程学习笔记之三 -----多进程并发服务端

    首先是fork()函数.移步APUE 8.3.  比較清晰的解释能够參考http://blog.csdn.net/lingdxuyan/article/details/4993883和http://w ...

  2. python学习笔记(十二)标准库os

    os 模块提供了访问操作系统服务的功能,它所包含的内容比较多. >>> import os >>> dir(os) ['EX_CANTCREAT', 'EX_CON ...

  3. python教材目录,python 目录

    python在安装的时候,就自带了很多模块,我们把这些模块称之为标准库,其中,有一个是使用频率比较高的,就是 os .这个库中方法和属性众多,有兴趣的看官可以参考官方文档:https://docs.p ...

  4. Cygwin环境使用第三方ARMGCC编译eCos系统

    第三方ARMGCC通常是基于Mingw32的,使用的是Windows路径,如C:\ecos\packages\infra\current\src\startup.cxx:而eCos配置工具生成的Mak ...

  5. Linux开发学习笔记(二)

    (温馨提示:内容有点多,可点右边的目录进行跳转) Shell编程 1.简单介绍 Shell 脚本(shell script),是一种为 shell 编写的脚本程序.Shell 编程跟 java.php ...

  6. Linux:进程管理 | 进程创建 | 进程终止 | 进程等待 | 进程替换

    文章目录 进程创建 fork 写时拷贝机制 进程终止 退出码 进程退出方法 进程等待 阻塞.非阻塞的等待 进程替换 替换函数 exec l exec lp exec le exec ve exec v ...

  7. 【Linux】进程等待wait/waitpid status详解 (非)阻塞等待(代码)

    文章目录 进程等待原因 进程等待方法 wait waitpid 获取子进程status (非)阻塞等待 进程的非阻塞等待方式代码 进程的阻塞等待方式代码 进程等待原因 fork创建了子进程,子进程帮父 ...

  8. LINUX生成僵尸进程并ps打印出来

    3.编写实验程序task3.c创建一个子进程,要求在父进程中不用wait函数对子进程做任何处理,让子进程比父进程先结束,成为一个僵尸进程,并在程序中使用ps命令打印出僵尸进程的信息. 参考linux ...

  9. C 库函数 system/WIFEXITED/WEXITSTATUS

    文章目录 描述 声明 参数 返回值 实例 WIFEXITED/WEXITSTATUS函数 systerm两层含义 函数实例 详解解释 参考资料 描述 C 库函数 int system(const ch ...

最新文章

  1. 胳膊上无缘无故起了个大包
  2. Netty 高性能之道 - Recycler 对象池的复用
  3. 对讲机服务器信号不好怎么办呢,手机信号不好是什么原因?该怎么办?教你一招立马解决(绝对有效)...
  4. 左神算法:调整搜索二叉树中两个错误的节点(Java版)
  5. 使用aop解决事务问题(xml版)
  6. 搭建你的持续集成server - CruiseControl step by step(1)
  7. 【每日一练 085】性能优化-实例优化(四)
  8. 学英语(4)---出门在外常用的英语句子
  9. __builtin_apply/__builtin_apply_args
  10. Arctic Network UVA - 10369 (最小生成树,适合prim)
  11. USACO 1.3.2
  12. 深夜,基友给我发了个某短视频app,我没忍住把它给...
  13. linux中pak命令,Linux常用包管理及命令
  14. java 代码行数统计工具_代码行数统计工具
  15. 过采样oversampling为什么能够提高信噪比SNR呢?
  16. linux系统硬盘坏道,Linux下两种修复硬盘坏道方法
  17. 我的OpenBSD配置文件
  18. SpringBoot(四)整合视图
  19. C# WinForm 实例
  20. discuz论坛的抓取

热门文章

  1. 5分钟搭建一个粗粒度「视频去重」系统
  2. Cocos RenderTexture 橡皮擦效果 自定义画笔 最简单、最清晰的完全攻略
  3. CleanMyMac X.4.15.4官网下载让您的 Mac 极速如新,多达27项黑科技
  4. SQL SERVER 占用资源高的SQL语句
  5. 安卓仿美团、饿了么实现选择地址搜索检索
  6. 深圳车公庙的由来(转自深圳原住民网)
  7. 关于Angry Birds不能在我的板子上执行的探索
  8. cloud flare
  9. Android 回到顶部
  10. 隔空对话居然猜到我的小心思,客服的“魔性”挡不住……