waitpid函数原型如下:
pid_t waitpid(pid_t pid , int *status , int options)
与wait函数相比,系统调用二者的作用是完全相同的,但是waitpid多出了两个可由用户控制的参数pid和options。
pid:从参数的名字上可以看出来这是一个进程的ID。但是这里pid的值不同时,会有不同的意义。
1.pid > 0时,只等待进程ID等于pid的子进程,只要该子进程不结束,就会一直等待下去;
2.pid = -1时,等待任何一个子进程的退出,此时作用和wait相同;
3.pid = 0时,等待同一个进程组中的任何子进程;
4.pid < -1时,等待一个指定进程组中的任何子进程,这个进程组的ID等于pid的绝对值。

options:options提供了一些额外的选项来控制waitpid,例如WNOHANG和WUNTRACED这两个选项,这是两个常数,可以使用 “|”来链接起来使用,比如:
ret = waitpid(-1,NULL,WNOHANG | WUNTRACED);
如果不想使用这两个选项,可以设置为0,如果选择使用了WNOHANG参数调用waitpid,即使没有子进程退出,它也会立刻返回,而不像wait那样永远等待。

waitpid的返回值一共有三种情况:
1.当返回正常时,waitpid返回收集到的子进程的进程ID;
2.如果设置了WNOHANG,而调用中waitpid发现自己没有已退出的子进程可收集,则返回0;
3.如果在调用中出现错误,则返回-1,同时errno会被设置成相应的值来提示错误。


运行程序:

父进程在经历过10次失败的尝试后,终于收集到了退出的子进程。
这程序中,让父进程和子进程分别睡眠了10秒钟和1秒钟,代表他们分别做出了10秒钟和1秒钟的工作,父子进程都有工作要做,父进程利用工作间歇查看子进程是否退出,如果退出就收集它。

这里我们把第23行改为waitpid(pc,NULL,0):


重新运行后发现:修该后父进程将自己阻塞,直到有子进程退出为止。

进程等待函数(waitpid)相关推荐

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

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

  2. 【看表情包学Linux】进程等待 | wait/waitpid 的 status 参数 | 获取退出码与退出信号 | 初识核心转储

  3. linux 进程等待 wait 、 waitpid

    waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() ...

  4. Linux系统编程之进程控制(进程创建,fork函数,进程中止,进程等待,程序替换)

    进程创建 fork()------复制,返回值,写时复制 vfork()创建子进程-子进程与父进程共用同一块虚拟地址空间, 为了防止调用栈混乱,因此阻塞父进程直到子进程调用exit()退出或者进行程序 ...

  5. linux 进程wait,linux 进程等待 wait 、 waitpid(示例代码)

    waitpid() 与 wait() 功能相似,都是用户主进程等待子进程结束或中断. 可用于进程之间的同步 wait 函数原型 pid_t wait(int *status); 函数说明 wait() ...

  6. LInux:进程等待之wait() waitpid()

    进程等待 之前说,子进程退出,父进程如果不管不顾,就可能造成"僵尸进程"的问题,进而造成内存泄露,进而,进程一旦变成僵尸状态,杀人不眨眼的"kill -9"也无 ...

  7. Linux进程创建fork、进程退出exit()、进程等待waitpid()

    虽然通过标题,我们就轻易的知道了这三个函数的作用,可是,你真的了解这几个函数码?下面让我们来看看这三个函数到底有什么! 一.进程创建fork() 首先,我们来看一看fork()的函数声明: #incl ...

  8. Linux进程3:父进程等待(wait,waitpid)子进程退出并收集子进程退出状态,僵尸进程

    父进程等待(wait,waitpid)子进程退出并收集子进程退出状态 1.父进程为什么要等待子进程退出? 创建子进程目的:------干活 我们要知道干活结束没. 子进程退出状态不被收集,变成僵尸进程 ...

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

    Linux编程基础之进程等待(wait()函数) 编程过程中,有时需要让一个进程等待另一个进程 ,最常见的是父进程等待自己的子进程 ,或者父进程回收自己 的子进程资源包括僵尸进程.这里简单介绍一下系统 ...

最新文章

  1. python随机产生10个不同的两位数_python解决两位数加减法快速出题问题
  2. readUnsignedInt () 自动移动字节流位置,和.net是一样的
  3. postgresql返回行数_怎么优化你的SQL查询?以PostgreSQL为例
  4. 顺序程序设计02 - 零基础入门学习C语言08
  5. centos7.3部署django用uwsgi和nginx[亲测可用]
  6. java ajax json 乱码_java+ajax加载中文json串后出现乱码问题的解决办法
  7. mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)
  8. C语言之volatile用法(二十一)
  9. python中什么是异常,python中异常处理,python异常处理,什么是异常?异常是一
  10. 五连阳回调买入法_一旦出现“4连阳+1阴”形态,坚定满仓买入,百分百是主升浪...
  11. 聚类 轮廓 matlab,Matlab聚类分析
  12. uni-app引入阿里云矢量图标库
  13. 显示当前系统时间和日期
  14. css3 gird布局
  15. python 爬网页通知_用Python实现一个爬取XX大学电费通知的小脚本
  16. 文件上传页面出现400错误的问题
  17. 2007年开关稳压电源设计报告!!!
  18. 结构体类型数据单链表的操作
  19. JIRA 从低版本升级到高版本(3 6 2- 6 0 8)
  20. 服务器中了勒索病毒怎么办,服务器中了勒索病毒怎么解决,服务器中了勒索病毒怎么处理

热门文章

  1. python 对英文句子分词 ,去重,排序
  2. 旋转框目标检测mmrotate v0.3.1 训练DOTA数据集(二)
  3. 香港服务器价格差距大的原因是什么
  4. TensorFlow 概念的解析(i.e. 缘由)
  5. (八)Springboot整合Redis(RedisTemplate,使用Junit进行测试)
  6. wpf 字符串 指定大小_如何计算WPF TextBlock的已知字体大小和字符宽度?
  7. 搜索增长超80%,小红书多元内容发力!这些行业迎好机遇…
  8. 用adb卸载安卓手机系统内置的应用
  9. 计算机网络实验-交换机基本配置
  10. 计算机局域网访问诲康硬盘,鐖诲康浠€涔堬紝鎰忔€濓紵