【进程控制】超详细讲解wait和waitpid的原理(结合代码)

文章目录

    • 前言
    • waipid函数
      • 参数option
      • 什么叫非阻塞等待?
      • 参数status
    • wait 函数

前言

在了解了进程状态这一概念之后,我们明白了什么叫做僵尸进程:子进程退出,父进程“不管不顾”。而一旦存在僵尸进程,势必也会存在内存泄露问题,所以作为一个父进程,及时处理子进程的退出信息是他的责任。那么子进程的退出信息到底是什么?以及父进程怎么接收到子进程的退出信息?本文章重点围绕这两个问题展开叙述。

进程等待
进程等待是指一个进程暂停执行,等待另一个进程的结束。最常见的是父进程等待自己的子进程,或者父进程回收自己的子进程资源包括僵尸进程

等待方法有:wait函数和waipid函数

waipid函数

#include<sys/types.h>
#include<sys/wait.h>
pid_t waitpid(pid_t pid,int* status,int options);

在这里插入图片描述
waitpid返回导致waitpid函数返回的已终止子进程的PID。默认情况下(options=0),waipid会挂起调用程序的执行,此时父进程被阻塞直到它的等待集合中的一个子进程终止。等待集合的成员是由参数pid来确定的。

如果pid>0,那么等待集合就是一个单独的子进程,它的进程PID等于参数pid。
如果pid=-1,那么等待集合就是父进程的所有子进程。

查看执行waitpid过程中,父进程的状态
观察以下代码:
在这里插入图片描述
在这里插入图片描述
可以观察到在waitpid执行过程中父进程进入了阻塞状态。

参数option

可以通过将options设置为WONHANG、WUNTRACED和WCONTINUED的各种组合来修改默认行为。

WONHANG:挂起调用进程的执行,如果等待集合中的任何子进程都还没有终止,那么就立即返回(返回值为0).默认的行为是挂起调用进程,直到有子进程终止。在等待子进程终止的同时,可以做其他的动作

WUNTRACED:挂起调用进程的执行,直到等待集合中的一个进程变成终止或者被停止。返回的PID是等待导致waipid返回的子进程的PID.但我们想要检查已终止或者被停止的子进程时,可以用这个选项。

WCONTINUED:挂起调用进程的执行,直到等待集合中一个正在运行的进程终止或等待集合中一个被停止的进程收到SIGCONT信号重新开始执行

其中WONHANG选项可以使父进程发生非阻塞等待

什么叫非阻塞等待?

非阻塞等待是一种操作系统中的机制,它允许进程在等待子进程结束时,不必一直阻塞直到子进程退出。具体来说,当使用waitpid系统调用时,可以设置WNOHANG标志来启用非阻塞等待模式。如果子进程尚未结束,waitpid将立即返回,而不是等待子进程结束。这样,父进程可以在检测到子进程仍在运行时继续执行其他任务,并在稍后再次尝试检查子进程的状态,直到子进程结束。

以下代码可以观察到父进程在等待过程中,还可以做其他的事
在这里插入图片描述
在这里插入图片描述
如果带有WONHANG选项,waitpid如果返回值为0,说明子进程还没有终止,需要下一次重复进行等待。一般来说调用一次waitpid是不够的,因为不知道还要进行等待多少次,所以我这里配合循环等待。这样一种循环的非阻塞等待,就被称为非阻塞轮询方案

参数status

观察waitpid函数的声明,参数status是一个指针,能记录函数修改的值,也就是输出型参数。可以将参数设为NULL,意味着不关心子进程的退出信息。否则,status参数就记录着子进程退出信息
status代表的整数有32个比特位,其中低16位的比特位记录着子进程的退出码和退出信号。

在这里插入图片描述
8-15位二进制转换为十进制表示的就是退出码,0-6位7个二进制表示的是退出信号。
假设截取到status的低16位二进制为:
0000 0001 0000 0000就表示子进程的退出码为1,退出信号为0(无异常)。
用以下代码测试status的值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
了解了status的作用,也就知道了父进程是如何接收到子进程的退出信息的了。同样,也很清楚的明白了,子进程的退出信息无非就是退出码和退出信号。作为父进程有权利也有义务去了解一个子进程的退出信息。

wait 函数

#include<sys/types.h>
#include<sys/wait.h>
pid_t wait(int*status);

wait函数作用和waitpid相识,相当于waitpid的简单版本,返回被等待进程的pid(一有子进程终止就返回),失败返回-1。其参数status的含义与waitpid中的一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/493525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

介绍部署esxi8.0产品的方式

什么是esxi esxi的中文叫裸机虚拟机管理器 ESXi是由VMware公司开发的一种裸机虚拟机管理器&#xff0c;全称为VMware ESXi。 ESXi是一种虚拟化技术&#xff0c;专门设计用于在物理服务器上运行虚拟机&#xff0c;它的主要特点是能够最大限度地降低硬件配置要求并简化部署过程…

【深度学习】深度学习md笔记总结第2篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;深度学习课程&#xff0c;深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍&#xff0c;2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

基于 Linux 的更新版 MaxPatrol VM 可扫描 Windows

&#x1f47e; MaxPatrol VM 2.1 是俄罗斯唯一一款可以安装在 Linux 上并以审计和五重测试模式扫描 Windows 主机&#xff08;甚至是旧版本&#xff09;的漏洞管理产品。 让我们告诉你更新后的 MaxPatrol VM 还有哪些有用的功能&#xff1a; 1. 由于采用了新的数据存储模式&a…

全国植被类型分布数据

引言 全国植被类型分布数据利用 Landsat 卫星数据&#xff08;Landsat TM&#xff0c;ETM和 OLI&#xff09;完成了长时序的地表覆盖变化检测&#xff0c;并结合变化 检测结果实现了逐区域和逐期的地表覆盖动态更新&#xff0c;30米精细植被类型分布数据&#xff0c;共包含 2…

微服务架构学习汇报PPT

所有关于微服务架构的知识也好&#xff0c;经验也罢&#xff0c;不一定适合每个希望做微服务系统的技术人员的实际需求。“道无常道&#xff0c;法无常法&#xff0c;君子审时度势&#xff0c;自可得而法”。实际项目里需要做哪些工作&#xff0c;采取哪些策略&#xff0c;先后…

Matlab|计及电池储能寿命损耗的微电网经济调度

目录 1 主要内容 储能寿命模型 负荷需求响应 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约…

基于SSM的高校推免报名(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的高校推免报名&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…

[AIGC] 对比MySQL全文索引,RedisSearch,和Elasticsearch的详细区别

全文搜索是数据库和搜索引擎的重要功能。这个功能能在一个或多个列中查找用户查询的文本&#xff0c;这对诸如电子商务网站和检索大量文本数据的应用是必需的。在这篇文章中&#xff0c;我们将详细对比三种主流全文搜索技术&#xff1a; MySQL全文索引&#xff0c;Redis的Redis…

基于springboot实现房产销售系统项目【项目源码+论文说明】

基于springboot实现房产销售系统演示 摘要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于房产销售系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了房产销售系统…

151 shell编程,正则表达式,在C语言中如何使用正则表达式

零&#xff0c;坑点记录&#xff1a;bash 和 dash 的区别&#xff0c;导致的坑点 查看当前用的shell 是啥&#xff0c;用的是/bin/bash hunandedehunandede-virtual-machine:~$ echo $SHELL /bin/bash 当shell 脚本运行的时候&#xff08;后面会学到方法&#xff0c;这里是最…

Vue 3中ref和reactive的区别

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

NO9 蓝桥杯单片机实践之串口通信的使用

1 回顾 串口通信的代码编写结构还是与中断一样&#xff0c;不同的是&#xff1a; 初始中断函数条件涉及到串口通信相关的寄存器和定时器1相关的寄存器&#xff08;定时器1用于产生波特率&#xff09;&#xff0c;但初始条件中的中断寄存器只考虑串口通信而不考虑定时器1。 vo…

Docker搭建LNMP环境实战(04):安装VMwareTools共享文件夹

1、加载VMware Tools安装盘 在VMware客户端&#xff0c;点击主菜单&#xff1a; 图1 启动VMware Tools安装 再点击下面的菜单&#xff1a; 图2 打开设置界面 出现下面的界面&#xff0c;虚拟DVD加载的是linux.iso 图3 查看VMware Tools的DVD虚拟安装映像文件 将DVD加载到CentO…

阿里云服务器优惠价格61元一年,多配置报价,来看看

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网aliyunfuwuqi.com整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新…

实例、构造函数、原型、原型对象、prototype、__proto__、原型链……

学习原型链和原型对象&#xff0c;不需要说太多话&#xff0c;只需要给你看看几张图&#xff0c;你自然就懂了。 prototype 表示原型对象__proto__ 表示原型 实例、构造函数和原型对象 以 error 举例 图中的 error 表示 axios 抛出的一个错误对象&#xff08;实例&#xff0…

题解:CF1937C(CF1936A)——Bitwise Operation Wizard

题解&#xff1a;CF1937C&#xff08;CF1936A&#xff09;——Bitwise Operation Wizard 一、 理解题意 1. 链接题目网址 CodeForces; LuoGu。 2. 翻译英文题面 二、 设计算法 1. 观察数据范围 读题发现 ∑ n ≤ 1 0 4 \sum n\leq 10^4 ∑n≤104&#xff0c;因此考虑 …

phpspreadsheet导出Excel报错: Invalid numeric value for datatype Numeric

使用 phpspreadsheet 导出Excel的一段代码如下&#xff1a; $sheet->setCellValue($cellName[$kk] . ($key 2), $vv);如果某个字段值里面包含 换行符(\n) 会导致报错&#xff1a; Invalid numeric value for datatype Numeric解决办法&#xff1a; if (substr($vv, -1) …

低功耗、低成本 NAS 的可能性

使用现状&#xff1a;多台工作电脑&#xff0c;家里人手一台&#xff0c;还在两个住处 有好几台工作电脑&#xff0c;不同电脑有不同的用途&#xff0c;最大的问题就是各个电脑上文件的同步问题&#xff0c;这里当然就需要局域网里的公共文件夹&#xff0c;在NAS的问题上查了网…

【Java程序设计】【C00392】基于(JavaWeb)Springboot的校园生活服务平台(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园生活服务平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

如何压缩视频大小?3个很简单的方法~

有时候在网站上传视频时&#xff0c;最大限制上传大小为10M&#xff0c;可我要上传的视频体积有30M&#xff0c;这可怎么办呢&#xff1f;想必大家都遇到过类似的情景&#xff0c;或是为了节约磁盘、网盘的空间&#xff0c;方便文件传输发送等&#xff0c;如何压缩视频大小&…