Linux编程基础之进程等待(wait()函数)

编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己

的子进程资源包括僵尸进程。这里简单介绍一下系统调用函数 :wait()

函数原型是

#include

#include

int wait(int *status)

函数功能是 :父进程一旦调用了wait就立即阻塞自己,由wait 自动分析是否当前进程的某个子进程已经退出,如

果让它找到了这样一个已经变成僵尸的子进程 ,wait就会收集这个子进程的信息 ,并把它彻底销毁后返回;如果

没有找到这样一个子进程 ,wait就会一直阻塞在这里 ,直到有一个出现为止。

注 :

当父进程忘了用wait()函数等待已终止的子进程时,子进程就会进入一种无父进程的状态,此时子进程就是僵尸

进程.

wait()要与fork()配套出现,如果在使用fork()之前调用wait(),wait()的返回值则为­1,正常情况下wait()的返回值为

子进程的PID.

如果先终止父进程,子进程将继续正常进行 ,只是它将由init进程(PID 1)继承,当子进程终止时,init进程捕获这

个状态.

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

代码示例 :wait.c

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 /***********************************************************

9     功能说明 :进程等待wait()方法的应用

10     author: linux.sir@

11

12 ***********************************************************/

13 void waitprocess();

14

15

16 int main(int argc, char * argv[])

17 {

18   waitprocess();

19

20 }

21

22 void waitprocess()

23 {

24

25   int count   0;

26

27   pid_t pid   fork();

28   int status   ­1;

29

30   if(pid<0)

31   {

32     printf("fork error for %m\n",errno

linux编程取消wait函数,Linux编程基础之进程等待(wait()函数).pdf相关推荐

  1. 初版ps3安装linux,索尼取消PS3安装Linux系统 向全美旧版玩家巨额赔款

    索尼取消PS3安装Linux系统 向全美旧版玩家巨额赔款 2016-06-23 17:15 来源:cnBeta 游戏观察6月23日消息,在E3游戏展上十分低调的索尼着手旗下PS NEO在年底的发布,但 ...

  2. linux系统取消报警声,Linux 中警报声的消除

    一:消除shell中 铃声有三种风格:none, visible, (1)消除shell的报警声,就是按tab键不对的响声: 在/etc/inputrc中加入一行:(我在RedHat9.0中尝试了) ...

  3. linux如何取消分区加密,linux下分区与加密详解

    Linux是一类Unix计算机操作系统的统称.Linux操作系统的内核的名字也是"Linux".如何对linux系统进行分区和分区加密呢?下文给出了详细的描述. redhat企业6 ...

  4. linux怎么取消raid磁盘阵列,Linux下彻底关闭某个RAID磁盘阵列

    1.查看RAID磁盘阵列信息,确认一下要关闭哪个.如:关闭md0这个阵列 [root@godben ~]# cat /proc/mdstat Personalities : [raid6] [raid ...

  5. linux文件取消只读fstab,Linux去除fstab文件只读属性的方法

    实验了通过挂载选项禁止执行set位程序.二进制程序 [root@localhost~]#vi /etc/fstab/ #加入 /dev/sdc1 /var ext3 defaults,noexec 1 ...

  6. python中display函数_Python-函数基础总结与内置函数

    目录 上篇文章思考题 简介 函数长什么样子? 调用函数 位置传参与关键字传参 传参是值传递还是引用传递 定义函数 参数 默认参数 关键字参数 参数组 返回值 指定参数.返回值类型 内置函数 标准类型函 ...

  7. mysql 钩子函数_Vue入门基础(生命周期钩子函数)

    Header.vue {{title}} //js 逻辑部分 export default { name: 'Header', data() { return { title:"多组件嵌套d ...

  8. Linux进程 excel族函数的用法

    介绍 使用fork创建一个进程之后,经常会在新进程中调用exec函数执行别的程序 当前进程调用exec函数之后,这个进程会被完全替代换成新的程序,即便如此仍然是同一个进程,进程ID不变 函数族 exe ...

  9. Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)

    对比 进程 线程 fork pthread_create exit (10) pthread_exit (void *) wait (int *) pthread_join (,void **)阻塞 ...

最新文章

  1. python列表怎么创建_python怎么创建列表
  2. 热备份路由选择协议(HSRP)
  3. leetcode面试题 08.04. 幂集(递归)
  4. LeetCode题库整理【Java】—— 2 两数相加
  5. 计算机表演赛vr创意大赛,计算机表演赛新增VR创意大赛
  6. life words
  7. 监控 MySQL的多种方法
  8. 局域网共享设置——权限问题
  9. Okhttp3 使用和原理(DEMO)
  10. Atitit 提升记忆效率 有损压缩原理总结 目录 1. 常见方法 1 1.1. 抽象化提升一层 概念化 1 1.2. 骨架 ,目录化 大纲化 归纳整理 1 1.3. 提取关键词 ,摘要 ,
  11. 排序——归并排序(Merge sort)
  12. 倾斜摄影模型(.osgb)中心点位置的确定方法(SuperMap idesktop)
  13. linux系统编程界面,App主界面比较 - Android学习系列_Linux编程_Linux公社-Linux系统门户网站...
  14. 【论文阅读笔记】Ocean: 目标感知的Anchor-free实时跟踪器,速度70+FPS!刚开源(更新中)
  15. 8、某网络拓扑如图所示,路由器R1通过接口E1、E2分别连接局域网1、局域网2,通过接口L0连接路由器R2,并通过路由器R2连接域名服务器与互联网。R1的L0接口的IP地址是202.118.2.1/2
  16. “枪型思维”产品设计新探索 | 基金持仓诊断
  17. 天天向上答案python_天天向上的力量python(举一反三)
  18. 置换 置换群 应用 +置换群对某些算法问题的解释
  19. 公元前一万年至2100年全球耕地分布数据的分享与探索
  20. go 判断切片是否存在某元素_Golang切片(Slice)

热门文章

  1. R语言使用psych包的fa函数对指定数据集进行因子分析(输入数据为相关性矩阵)、使用rotate参数指定进行斜交旋转提取因子、使用fa.diagram函数可视化斜交旋转因子分析、并解读可视化图形
  2. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、为多个子图添加总标题(main title)
  3. TypeError: expected str, bytes or os.PathLike object, not module
  4. 句法分析应用领域及意义
  5. 语音识别、传统语音识别、带权有限转态转换器、深度语音识别、时序分类、CTC解码
  6. 使用String()解决utf-8字符转GB2312的问题
  7. 重启随机游走算法(RWR:Random Walk with Restart)
  8. mysql anyvalue报错_Mysql 的ANY_VALUE()函数和 ONLY_FULL_GROUP_BY 模式
  9. linux偏向swap,solaris/linux 增加swap交换空间的方法
  10. librosa.stft() 短时傅里叶变换