【lesson14】进程控制之进程等待

news2024/9/24 21:22:09

文章目录

  • 为什么要有进程等待?
  • 如何等待和什么是等待?

为什么要有进程等待?

1.子进程退出,父进程不管子进程,子进程就要处于僵尸状态------会导致内存泄漏

2.父进程创建子进程是要让子进程办事的,那么子进程把任务完成的怎么样?
子进程做任务的结果:
a.代码跑完,结果正确
b.代码跑完,结果不正确
c.代码没跑完,程序崩溃

父进程需要关心吗?如果需要如何得知?如果不需要该怎么处理?
以上就是为什么要进程等待的结果。

总结进程等待的必要性:

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

如何等待和什么是等待?

进程等待方法:
wait:基本验证回收僵尸进程的问题
waitpid:获取子进程退出结果的问题
代码演示:
僵尸进程问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决僵尸进程问题:
在这里插入图片描述
在这里插入图片描述
用wait函数解决:
在这里插入图片描述
wait函数是阻塞式等待
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到僵尸进程确实得到了回收。
为了能更好的看清我们对代码进行改进:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这回我们可以清楚的看到子进程先是S态然后是Z态最后被回收。

用waitpid解决:
在这里插入图片描述
我们可以看到waitpid有三个参数。
pid:要等待进程的pid,如果传入的是-1表示等待任一个进程
status:输出型参数
options:如果传入0为阻塞式等待

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面讲了status是输出型参数那么具体是干什么的呢?
status:可以获取子进程退出结果。
但是status并不是按照整数来整体使用的,而是按照比特位,将32个比特位进行划分,我们只学习第16位。
在这里插入图片描述
status次低8位为退出状态码:
演示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们可以看到退出码为0;
那么我们改一下看一下,改成10.
在这里插入图片描述
在这里插入图片描述
我们看到确实退出码为10.
status:低7位为退出信号
演示:
在这里插入图片描述
在原先的基础上多输出一个退出信号。
在这里插入图片描述
正常退出信号为0;
异常退出测试:
我们手动杀死子进程
在这里插入图片描述

在这里插入图片描述
我们可以看到退出信号为9

程序异常退出或者崩溃,本质是OS杀掉了该进程。
操作系统如何杀掉呢?
本质是OS发送信号杀掉的。

所以程序异常不光光是内部代码有问题,也可能是外力直接杀掉。

父进程通过wait/waitpid可以拿到子进程的退出结果,那么为什么要用wait和waitpid呢?直接用全局变量不行吗?
不行,因为进程具有独立性,那么当数据发生改变是就会发生写时拷贝,父进程无法拿到子进程全局变量的地址。

既然进程具有独立性,进程退出码不也是子进程的数据吗?父进程又凭什么拿到呢?wait和waitpid究竟干了什么呢?

僵尸进程:至少要保留该进程的PCB信息!task_struct里面保留了任何进程退出时的退出信息结果。

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

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

相关文章

AI小百科 - 什么是词向量?

如何表示一个单词的意义?对人来说,一般用解释法,用一段话来解释词的含义。如“太阳”在新华字典中的释义是“太阳系的中心天体。银河系的一颗普通恒星。”然而,这样的解释计算机是听不懂的,必须用更简洁的方式来对词义…

图片放大缩小时,图片上会出现蓝色蒙版解决方案

1. 问题描述: 页面上需要展示几张图片,并且有放大、缩小、旋转功能,在放大时,图片上出现了蓝色蒙版,如下图: 2. 解决方案: body{ -webkit-user-select:none; -moz-user-select:none; -ms-user…

等电位连接器行业应用综合方案

等电位连接器的原理 等电位连接器的原理是利用气体放电管或压敏电阻等非线性元件,当连接器两端的电位差大于所限峰值电压时,连接器导通,迫使连接器两端不同接地体电位基本相等,消除接地体间放电现象,从而避免了由于地…

p11 第60题 设计一个算法,逆序单链表中的数据 电子科技大学2014年数据结构(c语言代码实现)

通过头插法可以实现单链表的逆置 下方博客有图解: 王道p40 5.将带头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为O(1)-CSDN博客 单链表的逆置可以通过遍历链表,逐个将节点取出并插入到新链表的头部来实现…

第31届中国国际测量控制与仪器仪表展览会隆重举行,汉威科技创新产品精彩亮相

10月23日~25日,由中国仪器仪表学会主办的第31届中国国际测量控制与仪器仪表展览会(原“多国仪器仪表展”)于北京国家会议中心隆重举行。 本届展会吸引了全球400多家行业企业、高校及科研院所参展,同期还举办了主论坛及多场分论坛活…

GB28181学习(十三)——订阅与通知

事件订阅 要求 事件订阅应使用SUBSCRIBE方法;事件源接收事件订阅时,事件源应向事件观察者发送确认消息;事件源: 联网系统SIP服务器报警设备移动设备被集成的卡口系统等 事件观察者 联网系统SIP服务器客户端 事件: 报…

学习笔记-极大似然法与最小二乘法

1、极大似然法( maximum likelihood estimation,MLE ) 极大似然法( maximum likelihood estimation,MLE )是概率统计中估算模型参数的一种很经典和重要的方法。 (1)定义 最大似然估…

ArcGIS中批量mxd高版本转低版本

我们经常在给别人发ArcGIS的工程文件mxd,结果到别人那发现mxd工程文件打不开,原因是我们的arcgis版本高于别人,此时工程文件又很多,一个个转存成低版本又嫌麻烦,于是我们做了个批量mxd高版本转低版本的小工具&#xff…

2023平台工程崭露头角,AI 带来新机遇与挑战

在今年,平台工程正在迅速在 IT 企业中崭露头角,成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程:快速采纳和影响》,83%的受访者已经完全实施了平台工程,或正处于某种实施阶段。 平台工…

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node,官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径, 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令,Windows10 一般自带。 可以通过以下方式…

DC-7 靶机

DC_7 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 搜索相关信息 在配置中发现了用户名密码字样 $username "dc7user"; $password "MdR3xOgB7#dW";ssh 登录 尝试使用获取的账密进行登录 网页登录失败 尝试 ssh 登录 成功登录 登陆今后提…

迷你洗衣机哪个牌子好又实惠?内裤洗衣机热销前四榜单

小型内裤洗衣机是一款很实用的家用电器,非常适合住在小户型的房子里,或者经常要出差的人。所以,买什么牌子的内衣洗衣机比较好?目前市场上各品牌各有各的特色及应用场合,例如适合于贴身衣物如内衣、内裤、婴儿衣物清洗…

线性表操作的实现--单链表(链式存储结构)

本文参考朱战力老师的数据结构与算法--使用C语言一书 目录 文章目录 前言 一、链表是什么? 二、具体实现 1.单链表的定义 2.初始化ListInitiate(SLNode **head) 3.求当前元素的个数ListLength(SLNode *head) 4.插入Lis…

学会Docker之——界面化操作(Docker Desktop)

Docker Desktop 是一款用于在桌面环境下开发、构建和容器化应用程序的工具。它适用于 Windows 和 Mac 操作系统,让开发人员可以轻松地在本地环境中创建和运行容器,并与 Docker Hub 和其他容器注册表进行交互。Docker Desktop集成了Docker Engine&#xf…

C语言文件操作(详解)

💓博客主页:江池俊的博客⏩收录专栏:C语言进阶之路👉专栏推荐:✅C语言初阶之路 ✅数据结构探索✅C语言刷题专栏💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论&#x…

Maven历史版本下载

网址: https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/

个人博客测试报告

目录 一、项目背景 二、项目功能 三、测试计划 功能测试 1、测试用例 ​编辑 2、 实际执行测试的部分操作步骤/截图 3、发现的bug 自动化测试 博客访问连接 一、项目背景 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据&#xf…

文心一言简单体验

百度正式发布文心一言,文心一言 这里的插件模式挺有意思: 测试了一下图解说明,随意上传了一张图片: 提供图解让反过来画,抓住了部分重点,但是还是和原图有比较大的差异! 百宝箱 暂未逐个体验&am…

台灯应该买什么样的才能护眼?五款专业的护眼台灯推荐

台灯主要还是以护眼台灯为主,因为不仅色谱丰富,贴近自然色的全光谱色彩,通常显色指数都能达到Ra95以上,显色能力特别强,而且还具有其他防辐射危害、提高光线舒适度的特性,比如侧发光技术、漫反射技术等大大…