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

进程(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.mzph.cn/news/123179.shtml

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

相关文章

iOS调试技巧——使用Python 自定义LLDB

一、类介绍 在使用Python 自定义LLDB之前,先了解一下LLDB的一些类型 SBTarget 正在被调试的程序SBProcess 和程序关联的具体的进程SBThread 执行的线程SBFrame 和线程关联的一个栈帧SBVariable 变量,寄存器或是一个表达式 一般情况下,我们…

D-LINK SQL注入漏洞让攻击者获得管理员权限

D-Link DAR-7000 设备中发现了一个名为 SQL 注入的安全漏洞。 SQL注入是一种恶意攻击,它利用Web应用程序中的漏洞注入恶意SQL语句并获得对数据库的未经授权的访问。 此技术允许攻击者查看、修改和删除数据库中的数据,这可能对数据的机密性、完整性和可…

Linux下进程地址空间初步理解

进程地址空间 进程地址空间是操作系统为每个进程分配的一块内存空间,用于存储进程的代码、数据和堆栈等信息。进程地址空间是逻辑上独立而相互隔离的,每个进程拥有自己独立的地址空间,进程之间不能直接访问彼此的地址空间。 代码段&#xff…

【Java】HashSet集合用法

目录 HashSet 集合特点 示例代码 手写HashSet集合 HashSet 没有Get() HashSet 集合特点 HashSet 基于HashMap 来实现的,是一个不允许有重复元素的集合HashSet 允许有 null 值HashSet 是无序的,即不会记录插入的顺序HashSet集合实现了Set接口HashSet …

SpringCloud Alibaba【三】Gateway

Gateway配置与使用 前言新建gateway子项目pom.xml配置文件启动类访问接口方式 测试拓展 前言 在工作中遇到一种情况,一个父项目中有两个子项目。实际使用时,需要外网可以访问,宝信软件只能将一个端口号发布在外网上,所以需要运用…

什么是操作系统

如果你能大概了解下图?这个大概了解操作系统的样子,这是计算机的一些个裸件,了解这些对将来深入学习操作系统,是一个基础。 今天的内容:我们要建立操作系统的一个宏观轮廓 这个有黑色的,一条一条的&#…

Kubernetes技术与架构-存储 2

在Kubernetes集群中,一块持久化存储空间是可以被回收再利用,简称PV,即PersistentVolume,Pod实例需要使用PV的时候,可以使用PVC定义申请PV存储资源,PVC是PersistentVolumeClaim的简称,PV的申请分…

「实验记录」CS144 Lab0 networking warmup

文章目录 一、Motivation二、SolutionsS1 - Writing webgetS2 - An in-memory reliable byte stream 三、Results四、Source 一、Motivation 第一个小测试 webget 是想让我们体验并模拟一下在浏览器中键入 URL 后获得远程服务器传来的内容,这并没有太大的难度&…

【Oracle】Navicat Premium 连接 Oracle的两种方式

Navicat Premium 使用版本说明 Navicat Premium 版本 11.2.16 (64-bit) 一、配置OCI 1.1 配置OCI环境变量 1.1.2 设置\高级系统设置 1.1.2 系统属性\高级\环境变量(N) 1.1.3 修改/添加系统变量 ORACLE_HOME ORACLE_HOME D:\app\root\product\12.1.0\dbhome_11.1.4 添加系…

基于AI与物联网技术的智能视频监控系统架构剖析

智能视频监控系统正逐渐成为我们日常生活和工作中不可或缺的一部分。基于物联网的智能监控系统架构为我们在各个领域提供了更高效、智能化和安全的监控解决方案。本文将以旭帆科技EasyCVR视频监控云平台为例,介绍基于AI、物联网的智能监控系统的架构,并探…

电脑提示由于找不到vcruntime140.dll文件,教你四个解决方案

本文将介绍vcruntime140.dll文件的定义、作用以及丢失的原因,并提供四个解决方案来解决这个问题。 首先,让我们来了解一下vcruntime140.dll文件是什么。vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分,它是运行使用…

业务设计——用户敏感信息展示脱敏及其反脱敏

业务需求 将用户敏感信息脱敏展示到前端是出于保护用户隐私和信息安全的考虑。 敏感信息包括但不限于手机号码、身份证号、银行卡号等,这些信息泄露可能导致用户个人信息的滥用、身份盗用等严重问题。脱敏是一种常用的保护用户隐私的方式,它的目的是减少…

IOC课程整理-6 Spring IoC 依赖注入

1 依赖注入的模式和类型 模式 类型 2 自动绑定(Autowiring) 官方定义 “自动装配是Spring框架中一种机制,用于自动解析和满足bean之间的依赖关系。通过自动装配,Spring容器可以根据类型、名称或其他属性来自动连接协作的bean&…

OpenCV官方教程中文版 —— 模板匹配

OpenCV官方教程中文版 —— 模板匹配 前言一、原理二、OpenCV 中的模板匹配三、多对象的模板匹配 前言 在本节我们要学习: 使用模板匹配在一幅图像中查找目标 函数:cv2.matchTemplate(),cv2.minMaxLoc() 一、原理 模板匹配是用来在一副大…

BUUCTF Reverse 新年快乐

下载文件先查壳,可以看到有UPX壳 用upx脱壳 拖到ida pro32,shiftF12查看字符串,看到关键字flag,双击进去 双击然后f5查看伪代码 main函数伪代码 关键函数: strncmp(const char *str1, const char *str2, size_t n)…

群智能算法之模拟退火算法

1.模拟退火算法简介: 2.模拟退火算法的关键点: (1)随机的更新可行解x,判断可行解x对应的函数值和原来函数值之间的大小:如果优于原来的函数值,则让新的可行解x为问题的解;否则以一定的概率(大于…

FL Studio21.2.0.3421最新汉化破解版中文解锁下载完整版本

音乐在人们心中的地位日益增高,近几年音乐选秀的节目更是层出不穷,喜爱音乐,创作音乐的朋友们也是越来越多,音乐的类型有很多,好比古典,流行,摇滚等等。对新手友好程度基本上在首位,…

【存储】lotusdb的原理及实现

最近看了lotusdb的源码。lotusdb是一个golang实现的嵌入式的持久化kv存储。 从整体设计上看,lotusdb采用了类似LSM树的架构,并采用了针对SSD的优化,将key和value分开存储。在此基础上,lotusdb将LSM树中存储key的SST使用B树或者ha…

WORD中的表格内容回车行距过大无法调整行距

word插入表格,编辑内容,换行遇到如下问题: 回车后行距过大,无法调整行距。 解决方法(并行): 方法1:选中要调整的内容,菜单路径:“编辑-清除-格式” 方法2&am…

No173.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…