进程(2)——进程状态(僵尸,睡眠……)【linux】

news2024/12/22 19:33:08

进程(2)——进程状态(僵尸,睡眠……)【linux】

  • 一.操作系统的进程状态:
    • 1.1 运行态
    • 1.2 阻塞态
    • 1.3 挂起态
  • 二.linux进程状态
    • 2.1 R——运行状态
    • 2.2 S——浅度睡眠状态
    • 2.3 D——(disk sleep)深度睡眠
    • 2.4 t/T(stop)
    • 2.5 X:(dead)
    • 2.5 Z:(zombie)
  • 三.孤儿进程:

一.操作系统的进程状态:

我们知道进程有多个
假设现在只有一个一个CPU,那进程会去争抢cpu的资源。
这个时候cpu会有一个运行队列,来实现让进程按照顺序执行。
在这里插入图片描述

这个是进程的运行队列,一个个进程都加载进运行队列中。

这个时候对应进程的代码和数据都加载进了进程之中

所以说内存不光要维护PCB,同时还管理着程序的代码和数据。

1.1 运行态

在运行队列中的进程就是运行态

1.2 阻塞态

因为进程未被内存读取前是在磁盘中的程序,所以对进程的管理实际上是操作系统对软件的管理

如果进程需要访问硬件(设备)中的资源,这个时候就要涉及到操作系统对进程的管理。

操作系统管理硬件也是先描述再组织,对硬件也会进行描述,硬件中有等待队列。
每个设备都有个等待队列
比如说一个进程需要键盘进行输入,操作系统就会让该进程进入到该设备等待队列
在设备的等待队列中的进程就叫阻塞态

比如说C语言的scanf函数等待输入时,这个时候就是阻塞状态

1.3 挂起态

我们要注意,当进程处于阻塞态中
进程的自身代码和数据还是存在内存中。

如果这时候进程在阻塞态中等待设备资源就位时
突然操作系统内部的内存资源不足了。

操作系统就会在进程中进行检查
将一些在挂起态的进程的pcb保留,将内存中的代码和数据从内存中丢弃

当进程所需的设备资源就位时,再将数据和代码从磁盘中重新读取

二.linux进程状态

上面的操作系统中的进程状态我们只是随便提一下而已。

我们的学习重心还是要放在Linux系统的进程状态上来。
在这里插入图片描述

2.1 R——运行状态

这里我们那test.c进程测试一下
在这里插入图片描述

这里用grep进行测试。
在这里插入图片描述
这里我们能发现test处于R+的运行状态。

这里的+先不谈,之后的博客中会进行讲解。

2.2 S——浅度睡眠状态

这里的S的睡眠状态,可以看成是操作系统中的阻塞状态。

这这里我们同样可以进行测试一下:
在这里插入图片描述

在这里插入图片描述
这里我们能发现进程一直处于设备资源的到位,处于S的阻塞状态。

2.3 D——(disk sleep)深度睡眠

前面我们在操作系统进程的挂起态中我们提到:
当内存太满的时候,系统有可能,会自己干掉进程

但是如果遇到一个进程正在向磁盘写入数据,正好被干掉的话,就会导致数据的丢失。
如果正好是比较重要的数据,那这个后果是不能承受的

所以创建了一个深度睡眠模式
专门交给那些向磁盘写入数据的进程。
防止系统误杀进程,从而造成数据丢失。

2.4 t/T(stop)

这个状态可以看作是程序处于设备等待队列的阻塞状态。

只不过这个阻塞状态不光是系统控制的,我们用户可以进行停止和继续。

这里就比如说gbd调试
我们打了断点后进程运行到断点处,就会进入stop状态

在这里插入图片描述
这里我们在程序的第四行打一个断点,然后运行程序。

在这里插入图片描述
就会发现这里的进程处于:
gdb test会等待指令进行下一步的阻塞态
而test处于t状态

2.5 X:(dead)

终止状态 :在相关进程丢尽垃圾队列中等待释放。

2.5 Z:(zombie)

当子进程死了以后,不会立马进行释放,而是会保留子进程的PCB以及内存和资源,让关心子进程的进程或者父进程来检查
确定了子进程的结束原因以后,之后再在放入终止状态。
这个保留PCB和内存资源的状态,就叫僵尸状态
这里可以来测试一下
在这里插入图片描述
这里我们用fork函数,让子进程消失,让父进程保留。

在这里插入图片描述
这里我们会发现这里的子进程处于Z状态

所以如果僵尸进程处理不当就会引起内存泄漏
进程一般退出的时候,如果父进程没有主动回收子进程的信息。
子进程会一直让自己处于Z状态,进程相关资源尤其是task_struct不会被释放。
僵尸进程会一直占用内存资源(内存泄漏)。

就比如我们上面的测试代码,这个时候子程序会一直处于僵尸状态

至于如何处理,这个就留到之后的博客了

三.孤儿进程:

父子进程,父进程先退出,子进程的父进程会被改成1号进程(操作系统),相当于被系统给领养
这里可以来测试一下:

这里我们让父进程先走,然后不停打印子进程的父进程pid
在这里插入图片描述
这里我们就能发现父进程从3090变成了1
在这里插入图片描述
这里就看出子进程被操作系统给收养了。

为什么要领养:
因为子系统进入Z状态的话,这样就没有人来收尸了。

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

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

相关文章

【数智化人物展】阿里元境CTO郭旷野:元宇宙技术推动数字内容生产变革

郭旷野 本文由阿里元境CTO郭旷野投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 数字经济发展的大背景下,数字技术持续演进,逐渐形成了数字化生活、数字化生产模式,与此…

从工厂到社会:探索如何应用设计模式工厂模式

文章目录 🌟 将设计模式工厂模式运用到社会当中🍊 工厂模式在社会中的应用🎉 工厂🎉 餐厅🎉 运输 🍊 工厂模式的优势🎉 代码简洁🎉 扩展性强🎉 便于维护和管理 &#x1f…

pytorch 笔记:KLDivLoss

1 介绍 对于具有相同形状的张量 ypred​ 和 ytrue(ypred​ 是输入,ytrue​ 是目标),定义逐点KL散度为: 为了在计算时避免下溢问题,此KLDivLoss期望输入在对数空间中。如果log_targetTrue,则目标…

【继承练习题--多态-- 动态绑定-- 重写】

文章目录 继承的练习题:多态多态实现条件 动态绑定什么是重写Override 注解重写的条件(缺一不可)有一种特殊的重写:叫协变类型重写的设计原则快捷键生成重写重写和重载的区别object类是所有类的父类 总结 继承的练习题&#xff1a…

芯片封装简介【待补充】

TO封装 最开始的封装,这类封装三脚的比较多,比如7805 7812 等电源芯片 STO三脚贴片封装 TO的贴片形式 三极管和LDO比较常见 DIP封装 51单片机(双列直插式封装) SIP封装单列直插式封装(罕见) 5. SOP封…

出师表排序

一.原文件 二.代码 package org.example;import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.util.List;public class day12 {public static void main(String[] args) {try (BufferedReader br new BufferedReader(new FileReader(…

Android 3D Launcher锁定IMU界面

故事背景: 最近工厂反馈由于VR设备老化测试完成之后,变绿界面不明显,只占3D系统一部分,每次需要戴头盔,才能确定老化完成。导致工厂效率变低,如果后期产能变大,效率更低。 1、针对以上需求我们需要拆分 1、…

动态规划-扫地机器人最少初始电量

扫地机器人在一个方格形状的地图中执行清扫任务,地图中每一个格子代表一个房间,地图用一个数组来表示: 1)扫地机器人从地图左上角出发,每次清扫完一个房间后只能向石或向下走到另外一个房间,最后到达右下角…

LeetCode--196. 删除重复的电子邮箱

文章目录 1 题目描述2 解题思路2.1 代码实现 1 题目描述 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ----------------------id 是该表的主键列(具有唯一值的列)。 该表的每…

售货机相关的电路

一、货道选通矩阵电路,类似扫描电路,驱动哪个电机,就打开相应的行线与列线输出 二、MDB纸币器,虽然现在国内都是手机支付,但如果机器还是外销国外还是有用 三、硬币器电路,投币与退币,脉冲信号…

解决git action定时任务执行失败的方法

为了测试git action定时任务是否有效,你可能选择一个最近的时间测试, 但是发现怎么也触发不了,是不是觉得很苦恼。但是同样的时间,在第二天的定时任务又能成功运行。 这是什么原因? 原因就在上图,git act…

【算法|动态规划No.31 | 01背包问题】01背包模板题

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

[双指针](一) Leetcode 283.移动零和1089.复写零

[双指针] Leetcode 283.移动零和1089.复写零 移动零 283. 移动零 1.题意分析 (1) 给你一个数组,将数组中的所有0移动到数组的末尾 (2) 保证非0元素在数组中相对位置不变 (3) 在原数组中操作 2.解题思路 由于题目要求我们移动数组内容(也就是交换两…

LED主流光源

LED主流光源 条形光源 (1)产品特点: ① 条形光源是大面积打光的首选光源,性价比高; ② 颜色可根据需求搭配,自由组合; ③ 光源照射角度与安装灵活可调。 (2)应用领域&a…

【Java 进阶篇】Java Request 获取请求体数据详解

在Java Web开发中,获取HTTP请求的请求体数据是一项常见任务。HTTP请求的请求体通常包含了客户端提交的数据,例如表单数据、JSON、XML等。在Java中,可以使用HttpServletRequest对象来获取HTTP请求的请求体数据。本文将详细解释如何使用Java获取…

java基础巩固

JDK11和JDK8是oracle重点维护的 常用的包 单例 多例 枚举 jar包打包 测试

大模型之十九-对话机器人

大语言模型的最早应用是Chatbot,其实我最早接触语义理解在2014年,2014年做智能音箱的时候,那时也是国内第一批做智能音箱的,在现在看起来当时的智能音箱比较傻,很多问题无法回答,长下文效果也不好&#xff…

决定放弃uniapp开发了,因为它实在是没有taro友好

被uniapp折腾了两天,实在是受不了它对vue3的支持和react的支持,可以这么说,uniapp完全没有支持vue3和react,这么说我觉得一点也不过分。相对于折腾了两天uniapp来讲,我使用taro只花了1个小时不到,就可以完美…

IO流框架,缓冲流

一.缓冲流有什么优点 Java中的缓冲流(Buffered Stream)具有以下优势: 提高效率:缓冲流通过在内存中缓存一部分数据,减少了直接从内存到磁盘或从磁盘到内存的频繁IO操作,从而提高了读写效率。缓冲区大小调整…

最新ChatGPT源码+AI绘画系统+详细图文搭建部署教程+支持OpenAI-GPT全模型+国内AI模型

一、智能AI创作系统 Mental AI创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说Mental AI是目前国内一款的ChatGPT对接OpenAI软件系统。…