Linux系列-僵尸状态

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

进程退出

进程退出之后,代码就不会执行了,而是由PCB维护起来,我们可以通过PCB来查看退出信息。 

进程退出时首先可以立即释放的就是进程对应的程序信息数据。

进程退出,要有退出信息,也就是进程的退出码,保存在自己的task_struct内部。task_struct这个结构体里面包含的是成员属性,要有退出信息(int,code,其它)。

这个可以管理进程的结构(task_struct)必须被OS维护起来,方便用户未来进行获取进程退出的信息。就像下面的这个示例一样。

getpid() --> return curr->pid;

emmm,其实这个进程退出像什么呢?就像是自己从学校毕业,虽然自己人不在了,但是个人的信息还是在学校里面的。

这个个人信息就是进程的退出信息,在PCB里面。

所以,这个时候我们想一下进程的创建的过程,是先有代码和数据,还是先有对应的内核数据结构。

很明显的,是不是得先有对应的内核数据结构,当管理信息建立好的时候,才能放进去对应的代码和数据,就像是,你去上学,学校里面肯定是先有你的信息的,然后你的人再去那里。

对吧,那么在没有传入代码和数据的时候,进程是已经创建好的,但是啊,它不可以调度。

是不是很明显,其实这个时候你也就没什么可以调度的。

这个时候如果我们要给这个状态一个概念,就叫做僵尸状态

操作系统释放进程,先释放代码和数据,把task_struct维护起来,这个时候就叫做僵尸状态。

所以说,task_struct是最早产生,但是是最后删除的。

那么,如果我想要看到僵尸状态,我应该怎么设计测试用例呢?

我们创建出子进程,这个时候父子同时存在,然后我们让子进程退出,父进程还存活,但是父进程什么都不做(尽管我们也不知道它可以做什么)。

这个时候的子进程就会出现短暂的僵尸状态。

17228 17229 17228 15449 pts/2    17228 Z+    1000   0:00 [myprocess] <defunct>

 这个时候,这个进程就从S变成了Z,就是变成了僵尸状态。

所以,Z是进程的僵尸状态,这个状态是为了维护自己的task_struct。方便未来父进程读取子进程的退出状态。

这个时候我们使用kill命令来删除子进程,删除了子进程之后父进程是不会对子进程进行回收的。

所以这个时候子进程是无效的,失效的。

接下来,我们举一个删除前后子进程状态的对比。

15501 20317 20317 15449 pts/2    20317 S+    1000   0:00 ./myprocess

这个是删除前的。

20317 20318 20317 15449 pts/2    20317 Z+    1000   0:00 [myprocess] <defunct>

这个是删除之后的。

在这个时候,如果没有人处理这个子进程,那么这个子进程就会一直处于僵尸状态,这个子进程的task_struct就会一直存在,从而一直消耗内存,这就造成了内存泄漏

一般父进程是需要读取子进程信息的,一旦读取完了之后,子进程才会自动退出。

而一旦回收之后,这个进程也就没了。

我们是无法杀掉一个在概念上已经死掉的进程的,所以这个时候必须要父进程来进行回收。

malloc开辟的是属于数据的,当关闭这个进程的时候,数据会直接进行删除。若是有一个不退出的进程,常驻内存的进程,若是这个时候不断的malloc,那么会导致资源越来越少。

所以,其实对于语言层面的内存泄漏问题,若是对于那种会自动退出的程序而言,问题是不算太大的,若是发生在常驻内存的进程当中,这个时候问题会比较大。

而我们写的大部分软件都是常驻内存的。

好了,本次的文章就到这里了,我们下次再见。 

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

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

相关文章

NLP论文速读(EMNLP 2023)|工具增强的思维链推理

论文速读|ChatCoT: Tool-Augmented Chain-of-Thought Reasoning on Chat-based Large Language Models 论文信息&#xff1a; 简介&#xff1a; 本文背景是关于大型语言模型&#xff08;LLMs&#xff09;在复杂推理任务中的表现。尽管LLMs在多种评估基准测试中取得了优异的成绩…

实现两个表格的数据传递(类似于穿梭框)

类似于element的 第一个表格信息以及按钮&#xff1a; <div style"height: 80%"><el-table :data"tableData1" border :cell-style"{text-align:center}" style"width: 100%;"ref"multipleTable1"selection-chang…

【学术论文投稿】JavaScript 前端开发:从入门到精通的奇幻之旅

【中文核刊&普刊投稿通道】2024年体育科技与运动表现分析国际学术会议(ICSTPA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 一、引言 二、JavaScript 基础 &#xff08;一&#xff09;变量与数据类型 &am…

【Golang】——Gin 框架与数据库集成详解

文章目录 1. 引言2. 初始化项目2.1 创建 Gin 项目2.2 安装依赖 3. 数据库驱动安装与配置3.1 配置数据库3.2 连接数据库3.3 在主函数中初始化数据库 4. 定义数据模型4.1 创建用户模型4.2 自动迁移 5. 使用 GORM 进行 CRUD 操作5.1 创建用户5.2 获取用户列表5.3 更新用户信息5.4 …

uniapp页面样式和布局和nvue教程详解

uniapp页面样式和布局和nvue教程 尺寸单位 uni-app 支持的通用 css 单位包括 px、rpx px 即屏幕像素。rpx 即响应式px&#xff0c;一种根据屏幕宽度自适应的动态单位。以750宽的屏幕为基准&#xff0c;750rpx恰好为屏幕宽度。屏幕变宽&#xff0c;rpx 实际显示效果会等比放大…

用 Python 与 Turtle 创作属于你的“冰墩墩”!

用 Python 与 Turtle 创作属于你的“冰墩墩”&#xff01; &#x1f980; 前言 &#x1f980;&#x1f40b; 效果图 &#x1f40b;&#x1f409; 代码 &#x1f409; &#x1f980; 前言 &#x1f980; 冰墩墩是2022年北京冬季奥林匹克运动会的官方吉祥物。以熊猫为原型&#x…

用Python爬虫“偷窥”1688商品详情:一场数据的奇妙冒险

引言&#xff1a;数据的宝藏 在这个信息爆炸的时代&#xff0c;数据就像是一座座等待挖掘的宝藏。而对于我们这些电商界的探险家来说&#xff0c;1688上的商品详情就是那些闪闪发光的金子。今天&#xff0c;我们将化身为数据的海盗&#xff0c;用Python这把锋利的剑&#xff0…

力扣hot100-->二分查找

目录 二分查找 1. 33. 搜索旋转排序数组 2. 34. 在排序数组中查找元素的第一个和最后一个位置 3. 240. 搜索二维矩阵 II 3. 287. 寻找重复数 二分查找 1. 33. 搜索旋转排序数组 中等 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&am…

http自动发送请求工具(自动化测试http请求)

点击下载《http自动发送请求工具(自动化测试http请求)》 前言 在现代软件开发过程中&#xff0c;HTTP 请求的自动化测试是确保应用程序稳定性和可靠性的关键环节。为了满足这一需求&#xff0c;我开发了一款功能强大且易于使用的自动化 HTTP 请求发送工具。该工具基于 C# 开发…

蓝队技能-应急响应篇日志自动采集日志自动查看日志自动化分析Web安全内网攻防工具项目

知识点&#xff1a; 1、应急响应-系统日志收集-项目工具 2、应急响应-系统日志查看-项目工具 3、应急响应-日志自动分析-项目工具 演示案例-蓝队技能-工具项目-自动日志采集&自动日志查看&自动日志分析 系统日志自动采集-观星应急工具(Windows系统日志) SglabIr_Co…

Jenkins修改LOGO

重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…

k8s-NetworkPolicy

NetworkPolicy 是k8s中的网络策略可以限制pod以及namespace之间的访问流量 演示一下名称空间之间基于端口的访问限制 官方对networkpolicy的介绍 官方网址&#xff1a; 网络策略 |Kubernetes &#xff08;简体中文&#xff09; 一&#xff1a;创建NetworkPolicy vim…

【算法一周目】滑动窗口(1)

目录 长度最小的子数组 解题思路 代码实现 无重复字符的最大字串 解题思路 代码实现 最大连续1的个数l l l 解题思路 代码实现 将x减到0的最小操作数 解题思路 代码实现 长度最小的子数组 题目链接&#xff1a;209. 长度最小的子数组题目描述&#xff1a; 给定一个…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

【K8S系列】Kubernetes集群资源管理与调度 深度分析

在现代微服务架构中&#xff0c;Kubernetes&#xff08;K8s&#xff09;作为容器编排平台&#xff0c;提供了强大的资源管理和调度能力。然而&#xff0c;随着应用规模的扩大和复杂性增加&#xff0c;如何高效地管理和调度集群资源成为一个关键挑战。本文将深入探讨 Kubernetes…

HarmonyOS鸿蒙系统上File文件常用操作

HarmonyOS鸿蒙系统上&#xff0c;file文件常用操作记录 1.创建文件 createFile(fileName: string, content: string): string {// 获取应用文件路径let context getContext(this) as common.UIAbilityContext;let filesDirPath context.filesDir / fileName;// 新建并打开…

【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程

目录 1.Spring MVC的基本介绍 2.大致分析SpringMVC工作流程 3.SpringMVC的快速入门 首先大家先自行配置一个Tomcat 文件的配置 配置 WEB-INF/web.xml 创建web/login.jsp 创建com.ygd.web.UserServlet控制类 创建src下的applicationContext.xml文件 重点的注意事项和说明…

DTH11传感器温度湿度+esp8266+阿里云+小程序

arduino在之前灯的基础上再添加两个库 Adafruit_Sensor&#xff0c;#include “DHT.h” 代码如下 #include <ESP8266WiFi.h> // 引入Arduino ESP8266核心库 #include <ArduinoJson.h> // 引入JSON处理库 #include <Ticker.h> // 引入定时库 #inclu…

【汇编语言】转移指令的原理(三) —— 汇编跳转指南:jcxz、loop与位移的深度解读

文章目录 前言1. jcxz 指令1.1 什么是jcxz指令1.2 如何操作 2. loop 指令2.1 什么是loop指令2.2 如何操作 3. 根据位移进行转移的意义3.1 为什么&#xff1f;3.2 举例说明 4. 编译器对转移位移超界的检测结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构…

mac安装appuim

要在macOS上安装Appium&#xff0c;这是一个自动化测试框架&#xff0c;可以用来对移动应用进行测试&#xff08;支持iOS和Android应用&#xff09;。为了安装Appium和其依赖的环境&#xff0c;你需要做一些准备工作。以下是详细的安装步骤&#xff1a; 前提条件 1、macOS系统…