Linux基础之进程等待

目录

一、进程等待的基本概念

二、进程等待的重要性

三、进程等待的方法

四、获取子进程status

五、options选项


一、进程等待的基本概念

       进程等待是指一个进程在执行过程中暂时停止,并等待某个条件满足后再继续执行的状态。这种等待通常是由于某些事件需要发生,或者某些资源需要被释放,才能使得进程继续执行。进程等待通常发生在多任务操作系统中,其中多个进程共享有限的资源,需要协调资源的使用和访问。

       其实对于进程等待这个概念,我们是有一个基本的了解的,那么我们该如何理解进程等待的意义呢,又如何去观测这样一个过程呢?这就是本节所要提及的东西。

二、进程等待的重要性

  • 之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。
  • 另外,进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。
  • 最后,父进程派给子进程的任务完成的如何,我们需要知道。如,子进程运行完成,结果对还是不对,或者是否正常退出。
  • 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息

由此,我们就能理解为什么要进行进程等待了。

三、进程等待的方法

这里我们主要介绍两个方法:

wait方法:
pid_t wait(int*status);
返回值:  成功返回被等待进程pid,失败返回-1。
参数:输出型参数,获取子进程退出状态,不关心则可以设置成为NULL


waitpid方法:
pid_ t waitpid(pid_t pid, int *status, int options);
返回值:
    当正常返回的时候waitpid返回收集到的子进程的进程ID;

    如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0;
    如果调用中出错,则返回-1,这时errno会被设置成相应的值以指示错误所在;

参数:

      pid:
            Pid=-1,等待任一个子进程。与wait等效。

            Pid>0.等待其进程ID与pid相等的子进程。
      status:

            WIFEXITED(status):若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出)

            WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)
       options:

           WNOHANG: 若pid指定的子进程没有结束,则waitpid()函数返回0,不予以等待。若正常结束,则返回该子进程的ID。

接下来就来让我们验证验证,先写一段代码:

看一下运行结果:

       按我们正常情况来说,我们的父子进程应该是同时向前运行的,但是根据结果我们可以发现,父进程并没有和我们子进程一并输出而是实实在在的等待我们的子进程结束了才进行的输出,这也印证了我们的父进程确实是在等待我们的子进程结束。

四、获取子进程status

要使用这个参数的话,我们就要好好地理解这个参数的含义和使用方法:

  • wait和waitpid,都有一个status参数,该参数是一个输出型参数,由操作系统填充。
  • 如果传递NULL,表示不关心子进程的退出状态信息。
  • 否则,操作系统会根据该参数,将子进程的退出信息反馈给父进程。

status不能简单的当作整形来看待,可以当作位图来看待,具体细节如下图:

       这里我们只研究status的低16比特位。根据图我们可以看到低7位表示我们的信号,8到15位则表示的是我们的退出状态也就是我们的退出码。

接下来,我们修改一下代码,再来观察一下结果:

先来看看正常的结果:

接下来我们使用信号杀死这个进程,再来看看其结果:

可以发现我们的退出信号变成了9。

当然,这里需要注意的一点是,当我们的进程因为异常而终止时,其退出码时无意义的。

五、options选项

对于我们 waitpid() 的第三个参数 options。
       这里需要说明的是,当我们的options为0时,就表示我们的父进程进行的是阻塞式等待,这个阻塞式等待表示的是我们的父进程在其子进程退出前一直处于持续等待的状态,一直在监听着其子进程,直到其子进程退出为止,并且在这期间,父进程是不会去做其他事的。
       那如果我们想要父进程干一些自己的事情该怎么做呢?将这个参数置为WNOHANG,这就表示非阻塞式轮询式去等待我们的子进程。当然因为我们父进程需要去完成其自己的任务而不是一直等待子进程退出,所以我们需要使用一个循环,让父进程过一会就去查看一下子进程是否退出。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt按钮的autoRepeat属性和default属性

autoRepeat属性:按住按钮不松,表示一直在点击按钮 default属性:点击Enter键表示在点击按钮

无缝接入GPT-4o:智创聚合API平台的创新与实践

在2024年5月13日,美国开放人工智能研究中心(OpenAI)发布了最新版本的ChatGPT——GPT-4o。这一更新标志着人工智能领域的又一重大进步,引起了全球科技界的广泛关注。GPT-4o的“o”代表“omni”(全能)&#x…

动态规划算法:背包问题

背包问题概述 背包问题 (Knapsack problem) 是⼀种组合优化的 NP完全问题 。 问题可以描述为:给定⼀组物品,每种物品都有⾃⼰的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最⾼。 根据物品的个…

【刷题】初探递归算法 —— 消除恐惧

送给大家一句话: 有两种东西, 我对它们的思考越是深沉和持久, 它们在我心灵中唤起的惊奇和敬畏就会日新月异, 不断增长, 这就是我头上的星空和心中的道德定律。 -- 康德 《实践理性批判》 初探递归算法 1 递归算…

AI预测体彩排3采取888=3策略+和值012路一缩定乾坤测试6月2日预测第9弹

今天继续基于8883的大底进行测试,今天继续测试,好了,直接上结果吧~ 首先,888定位如下: 百位:5,4,7,3,2,9,1,0 十位:4,6,5,7,2,9,1,0 个位:3,4,2,5,…

车流量智能监测识别摄像机

车流量智能监测识别摄像机是一项革命性的技术,正在为城市交通管理带来巨大改变。这种摄像机利用先进的人工智能和图像识别技术,能够实时监测道路上的车流量,并对车辆进行智能识别和分类,从而实现对交通流量的精准监测和管理。 与传…

Day02 设计首页导航条

设计首页导航条 导航条的样式,主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库。就看项目需要什么,就去源码拷过来使用。 直接下载源码,编译运行就可以看到Demo 了 下载后且正常编译成功了,是能正常跑起来…

iOS——类与对象底层探索

类和对象的本质 当我们使用OC创建一个testClass类并在main函数创建它的实例对象的时候,OC的底层到底是什么样的呢? 首先,我们要了解OC对象的底层结构,那么我们就得知道:OC本质底层实现转化其实都是C/C代码。 使用下面…

spoon工具的常用基础操作

一些常用转换工具 1、emp表输入->excel表输出 emp表输入,可以进行预览查看数据有没有过来excel表输出 成功执行后,可以到保存的excel位置进行查看。 2、excel输入->表输出 运行转换后可以在oracle进行查看是否有成功创建这个表 3、对部门最高…

【JAVA WEB实用与优化技巧】Maven自动化构建与Maven 打包技巧

文章目录 一、MavenMaven生命周期介绍maven生命周期命令解析 二、如何编写maven打包脚本maven 配置详解setting.xml主要配置元素setting.xml 详细配置 使用maven 打包springboot项目maven 引入使用package命令来打包idea打包 三、使用shell脚本自动发布四、使用maven不同环境配…

【协议开发系列】梳理关于TCP和UDP两种协议的区别和使用场景

起源 前二天项目上在核对外部对接服务的五元组列表的时候,有一位客户提问对于同样的服务同时支持tcp和udp二种方式,有什么优点和缺点,应该如何选择?这个问题突然让我愣了一下,确实好久没有“温故”了,相关…

商业新闻|当我们在讨论卖车时我们在讨论什么?

‍‍今天是2024年第22周 这是Yura「输出倒逼输入」计划的第10篇文章 全年进度:10/52 01 投资人为什么不断入局烧钱又亏损的新能源? 造车的烧钱速度超乎想象。除了最近的小米,这些年国内大大小小的玩家好像都在以不同的形式或直接或间接的参与…

【视频创作思维流程】教你从0培养视频创作思维

【视频创作思维流程】教你从0培养视频创作思维 1.创作认知2.培养自己的想象力2.1通过音乐辅助闭上眼睛想象2.2多看多见多模仿 3 视频脚本3.1简单的脚本3.2复杂脚本 4.拍摄预见能力4.1拍摄预见力思维用于转场4.2拍摄预见力思维给特效制作留住空间4.2拍摄预见力思维给字幕制作留住…

src挖掘-记一次付费资源的sign绕过

0x01 前言 最近都没怎么挖到过细小的漏洞,一直纠结于一些比较难以实现的点,天天在各种测试、上线服务器里面fuzz找遗漏的点(bushi) 大概上周突破了一处付费资源免费调用,定级了,故发出来水水文 0x02 绕过过程 逛着逛着主站&…

五种最新算法求解柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),提供MATLAB代码

一、WSA求解FJSP FJSP:波搜索算法(Wave Search Algorithm, WSA)求解柔性作业车间调度问题(FJSP),提供MATLAB代码-CSDN博客 二、SBOA求解FJSP FJSP:蛇鹫优化算法(Secretary bird optimization algorithm&a…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统,从属于智能控制,通过简化系统的复杂性,利用控制法来描述系统变量之间的关系,采用语言式的模糊变量来描述系统,不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性

GiantPandaCV | 浅谈分辨率对模型影响以及训练方法

本文来源公众号“GiantPandaCV”,仅用于学术分享,侵权删,干货满满。 原文链接:浅谈分辨率对模型影响以及训练方法 一、前言 最近几个人在讨论模型训练的时候,提到了一个尺度对于模型的影响以及训练方法的收益&#…

一天挣几十元的网上兼职副业有哪些?推荐几个适合普通人做的兼职副业,有线上的也有线下的,建议收藏哦~

一天几十的兼职,不是几百的,这个会更容易实现。 相比网络上充斥着各种五花八门的兼职,教你轻松月入过万,一年几十万的...... 对于绝大多数没有一技之长的普通人,网络小白的话刚开始会很难的,慢慢来就可以…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…