进程的等待

文章目录

  • 一、进程等待意义
  • 二、进程等待方法


一、进程等待意义

当父进程创建子进程之后,当子进程退出时,需要它的父进程回收它的内核数据结构对象(pcb),因为进程退出之后不回收它会造成内存泄漏问题,子进程退出,若是父进程不管,那么子进程就会一直是僵尸状态,而成为僵尸进程,会造成内存泄漏!进而进程一旦变成了僵尸状态,那么不会收到信号,那么也不会被杀死,可以说是刀枪不入。而且父进程创建子进程就是让子进程去执行不同的任务,那么子进程退出的时候,父进程要知道我给他的任务他完成进度完成情况,然后子进程退出的时候,需要父进程等待,然后父进程通过等待的方式,回收子进程资源,获取子进程退出信息。而通过进程等待处理内存泄漏是必须做的,但是对于子进程的任务完成情况父进程不一定会关心,这不是必须的。子进程的退出信息包含在pcb数据结构对象中,wait/waitpid调用操作系统来读取子进程的task_struct内核数据结构对象,用户无法通过操作系统去访问底层,所以父进程也不能直接去拿子进程的内核数据结构对象,只有调用wait/waitpid等系统接口,获取task_struct内核数据结构对象。而若是等待进程失败是什么原因?则表示等待的进程不是它的子进程他才会表现出等待失败的结果所以在等待时父进程只能等待它的子进程。

二、进程等待方法

**进程等待是是什么?**进程等待是通过系统调用wait/waitpid来进行堆进程状态检测与回收的功能
若是没有回收子进程父进程不等待,那么他就会一直处于僵尸状态
在这里插入图片描述
等待方法wait和waitpid
wait方法
在这里插入图片描述
在这里插入图片描述
等待子进程状态发生改变的时候就会回收子进程
在这里插入图片描述

在这里插入图片描述
等待成功会返回子进程pid,若是失败则会返回-1,子进程退出父进程回收
在这里插入图片描述
wait是等待任意一个子进程。
参数status
参数status是进程退出码的信息,它是一个输出型参数,会将wait内部等待的资源带出来也就是退出信息会交给父进程,而这个int 是被当作几部分来使用的,int 4 字节 32个比特位这4字节里面仅仅用到了低16个比特位,最低8位代表子进程是否出异常,低7位代表子进程收到的终止信号,第8比特位代表core dump标志位,而次低8位代表子进程的退出状态,一个整数只用到了低16位,而这低16位又分为两部分,但是总的来说都是为了表示子进程的退出信息描述,当kill -l查看信号时也就解释了维护信号不是从0号开始而是从1号信号开始了,因为最低位都是为1。所以要检测是否收到信号只需要检测低7位比特位是否为1,而次低8位则可以表示进程退出的状态,退出正不正常,若是出错了就会根据次低8位转换对应的退出码然后取得退出码信息。异常计算则是低7位全为1,然后与获得参数按位与status&0x7F,若是这个status的低7位全为0,那么进程就没有发生异常;退出码计算status先左移8位,表示次低8位计算,进而与次低8位比特位全为1的按位与,若是结果为0则进程退出正常(status>>8)&0xFF而关于获取退出码和异常检测系统提供了两个宏:进程异常检测 WIFEXITED(status),退出码检测WEXITSTATUS(status)
在这里插入图片描述

目前来说进程等待是必须的,wait它是等待任意一个进程,那么如果是多个进程呢?他没办法了,因此要用waitpid,waitpid等待进程时可以等待指定进程,那么他该如何等待,等待的又是谁?这是由waitpid的第一个参数决定
在这里插入图片描述
waitpid等待为pid为id的进程退出。
在这里插入图片描述
pid_t waitpid(pid_t pid, int *status, int options);
在这里插入图片描述
waitpid还有第三个参数options,这个参数是代表什么?
当父进程在等待的时候,若是父进程把自己的任务执行完毕了,但是子进程还不退出,而父进程要回收子进程,就会一直等待着子进程退出,而等待子进程的方式就是通过options来设置的,此时在等待的过程中,父进程会陷入一个阻塞状态,系统默认的等待方式为阻塞等待,阻塞等待就是父进程一直在等待,但是在着等待的过程中又不做其他的事情,就是一直等着。然后还有一种等待方式为非阻塞轮询等待!
而options可以设置选项 WNOHANG ,什么意思?这个参数可以设置等待方式为非阻塞等待,就是父进程在等待的过程中可以做自己的事情。就像是拜托一个人做事情,只有他来了才能做,我去找他,去他楼下找他,然后他说还有一会(还没有退出),我就在楼下的树下等着他(阻塞等待),在这个过程中不做任何事情,一直等到他下来为止,等了许久他终于下来了,这就是等待成功!而第二次还需要它的时候,这次结合上次经验,带一本书去等他 并且在等待的过程中一直给他打电话,在等待的过程中他没有下来我就看着书等着他,期间时不时的打电话询问他好了没,这样的等待方式为非阻塞轮询等待,打电话的过程就是为了确定它的状态。非阻塞等待父进程在等待过程中可以做自己的事情,但是这种任务一般都是较为简单的,工作量不大的,因为若是工作量很大的,当父进程在执行任务时子进程刚好退出了那么此时就没有进程来回收子进程,子进程就会造成僵尸。因此父进程就算在等待时执行任务也是那种任务量不大的!等待子进程才是父进程重要的事情,在等待的过程中执行自己的任务是顺带的。父进程创建多个子进程时,在等待的时候将第一个参数设置为-1,然后就可以等待任意一个进程,而还有多少子进程需要等待则用一个引用计数的方式表示还有多少子进程需要等待。在fork创建子进程之后,哪一个进程先运行无法明确,因为这要由调度器根据进程的优先级来管控,但是退出一定是父进程最后退出,因为父进程要回收子进程的退出信息。

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

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

相关文章

HarmonyOS ArkTS 骨架屏加载显示(二十五)

目录 前言1、骨架屏代码显示2、代码中引用3、效果图展示 前言 所谓骨架屏,就是在页面进行耗时加载时,先展示的等待 UI, 以告知用户程序目前正在运行,稍等即可。 等待的UI大部分是 loading 转圈的弹窗,有的是自己风格的小动画。其实…

010_documentation_in_Matlab中的帮助与文档

Matlab中的帮助与文档 1. 前言 一眨眼已经写了十篇文章。 000在Matlab中使用Python包CoolProp001Matlab运行时间测试与时间复杂度分析002避免使用for循环003Matlab中的向量约定004Matlab中的矩阵约定005Matlab中的数组索引006Matlab中的逻辑数组索引007Matlab学习的启动与加…

Word、Excel、PPT文件转PDF文件(C#)

一、添加依赖 为wpf项目引用Microsoft.Office.Interop.Excel、Microsoft.Office.Interop.PowerPoint、Microsoft.Office.Interop.Word、Office,依赖文件已经打到源代码包里了。 二、先定义一些命名空间 using Word Microsoft.Office.Interop.Word;using Excel M…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中,我们已经实现网络层与业务层分离,本节实现数据层与业务层分离,降低各层之间的耦合性,同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

Polar靶场web(三)

期待得到某一件事物的时候,才是最美好的。 签到 发现不能提交,看一下f12 发现提交按钮被禁用了,且最大输入9个字符,我们可以改一下。 现随便提交一个发现要提交ilovejijcxy session文件包含 发现有文件包含,那先包含…

02正式学习第一天

1、windows上加载socket库 链接输入ws2_32.lib 代码code&#xff1a; #ifdef _WIN32 #include<windows.h> #else #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<cstring> #include<arpa/inet.h> #include…

基于Unity+Vue3通信交互的WebGL项目发布实践

基于UnityVue3通信交互的WebGL项目发布实践 实践路线 基于UnityVue3通信交互的WebGL项目发布实践问题背景准备工作解决方案项目实践小目标搭建Unity测试项目 创建Vue3测试项目运行项目验证unity和vue通信功能总结与展望 问题背景 我们最近需要把unity开发的pc项目迁移到web端&…

文心一言 VS 讯飞星火 VS chatgpt (225)-- 算法导论16.3 7题

七、推广赫夫曼算法&#xff0c;使之能生成三进制的码字(即码字由符号0、1、2组成)&#xff0c;并证明你的算法能生成最优三进制码。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 推广赫夫曼算法以生成三进制码字需要对算法进行一定的修改&#xff0c;确保在每…

阿里云国际DDoS高防如何添加网站配置?

将网站域名配置到DDoS高防后&#xff0c;DDoS高防会为网站生成一个CNAME地址&#xff0c;您需要将网站域名的DNS解析指向高防CNAME地址&#xff0c;DDoS高防才能转发业务流量为网站防御DDoS攻击。本文介绍如何添加网站配置。 注意事项 接入DDoS高防&#xff08;中国内地&#…

WPF中获取TreeView以及ListView获取其本身滚动条进行滚动

实现自行调节scoll滚动的位置(可相应获取任何控件中的内部滚动条) TreeView:TreeViewAutomationPeer lvap new TreeViewAutomationPeer(treeView); var svap lvap.GetPattern(PatternInterface.Scroll) as ScrollViewerAutomationPeer; var scroll svap.Owner as ScrollVie…

2024最新软件测试20个基础面试题及答案

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是指在预定的环境中运行程序&#xff0c;为了发现软件存在的错误、缺陷以及其他不符合要求的行为的过程。 软件测试的目的是什么&#xff1f; 答案&#xff1a;软件测试的主要目的是保证软件的质量&#xff0c;并尽可能大…

C# OpenCvSharp-HoughCircles(霍夫圆检测) 简单计数

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using O…

基于Springboot的研究生调研管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的研究生调研管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

【基于springboot分析Quartz(v2.3.2)的启动流程】

基于springboot分析Quartz&#xff08;v2.3.2&#xff09;的启动流程 最近公司的定时任务使用了Quartz框架&#xff0c;在开发中经常出现定任务不执行了的问题&#xff0c;但是我又找不到原因所在&#xff0c;可把我愁坏了。于是我决定看看Quartz框架是怎么调度任务的。&#x…

基于单片机模糊算法温度控制系统设计

**单片机设计介绍&#xff0c; 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机模糊算法温度控制系统设计是一个综合性的项目&#xff0c;结合了单片机技术、传感器技术、模糊控制算法等多个方面。以下是对该设计的概要…

162.乐理基础-和声大调、旋律大调

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;161.音程、和弦板块总结、重点、建议 首先需要回忆一下18.调式、自然大调式&#xff08;C大调、D大调。。。&#xff09;与19.音阶是什么、有什么用&#xff0c;在18.调式、自然大调式&#xff08;C大调、D大调。…

openPLC_Editor C语言编程 在mp157 arm板上调用io等使用记录

1.编程界面比较简单&#xff0c;具备PLC开发编程的四种编程方式。梯形图语言LD &#xff0c;指令表语言IL&#xff0c;结构化文本语言ST&#xff0c;功能模块图语言FBD。 2.官方使用手册。学习资料实在是太少&#xff0c;目前都是自己比较费劲的研究。 3.2 Creating Your First…

UE5 SQLite笔记

开发环境&#xff1a; 系统&#xff1a;Windows 10 64 bit 引擎&#xff1a;Unreal Engine 5.1.1 IDE&#xff1a;JetBrains Rider 2023.2.1 语言&#xff1a;C 工具&#xff1a;DB Browser for SQLite SQLite数据类型&#xff1a; //INTEGER TEXT BLOB REAL NUMERIC/*integer…

家庭网络防御系统搭建-配置流量镜像到NDR系统

由于需要将家庭网络中的全部流量送到NDR分析系统进行分析&#xff0c;因此需要一个具备流量镜像功能的交换机或者路由器。在前面文章所提及的家庭网络架构中&#xff0c;需要一台交换机即可拷贝东西向流量以及南北向流量。当然如果家庭中的路由器或者其他设备具备交换机镜像功能…

EXCEL通过VBA字典快速分类求和

EXCEL通过VBA字典快速分类求和 汇总截图 Option ExplicitOption Explicit Sub answer3() Dim wb As Workbook Dim sht As Worksheet Set wb ThisWorkbook Set sht wb.Worksheets(2) Dim ss1 As Integer Dim ss2 As Integer Dim i As Integer Dim j As Integer j 1Dim aa()…