Linux --进程状态
目录
进程状态(宏观)
Linux进程状态
进程状态的查看
进程状态(宏观)
为了了解Linux的进程状态,首先我们得了解进程状态,因为不仅仅是在Linux下有进程状态,macos和windows下都有进程状态,这里先解释的是一个宏观概念下的,然后每个操作系统都会根据自己的特性和需求设置具体的进程状态。
如图所示这就是进程的流程图,其中执行也叫运行,这个地方是有有争议的,因为此时并不一定是在运行,而是在需要调度的时候处于进程队列中等待Cpu调度的过程。阻塞是当一些事件发生时,例如等待IO请求(一些对硬件进行换入换出的过程),等待竞争资源。其中scanf接口就是一个很好的说明,在代码执行到scanf的时候如果键盘中没有输入,那么cpu就会将进程从等待调度的队列中移动到键盘的等待队列中直到键盘的输入,这个过程就是阻塞。当键盘输入以后进程会被cpu重新移动到等待调度的队列中,这里需要说明一点的是,cpu在执行进程的时候并不是将一个进场执行完再进行下一个进程,而是通过给每一个进程分配一个时间片,当一个进程执行完时间片的时间就进行调度乱转,这是在单cpu的情况下。这种多个进程在一个cpu采用进程切换的方式在一段时间让多个进程都得到推进的行为叫做并发。还有一种方式是并行,即在多个cpu下真正做到多个进程同时运行。我们一般的计算机都使用的是并发的模式,因为cpu比较昂贵,而且个人不需要用的多cpu。那么有的人会问了,如果使用并发的模式为什么我们看不出软件会停止,那是因为cpu处理的时间很快,我们几乎感觉不到,但是有一些情况下如果你的手机启动了很多app你就会发现手机变卡顿了,那么这就是因为cpu进程过多,执行到app时所需要的时间增加,这样你就能看出来卡顿了。阻塞时状态为了减小cpu的压力,这样巧妙地操作使得个人计算机不需要购买太好的cpu就能够获得流程的运行,使一个cpu能够做更多的事情。运行和阻塞的本质其实都是让不同的进程处在不同硬件的等待队列之中!阻塞还有一种挂起状态,为了缓和内存紧张的情况,而将内存中处于阻塞状态的进程换至外存(硬盘)上,使进程又处于一种有别于阻塞状态的新状态。因为即使该进程所期待的事件发生,该进程仍不具备执行条件而不能进入就绪队列,称这种状态为挂起状态。当事件发生时,挂起状态会变为阻塞静止状态然后再进入运行状态等待系统调度。
Linux进程状态
有了对进程状态的了解,接下来我们可以对Linux的进程状态进行分析了。Linux进程状态在大体是遵循上面概念的,但是会在一些部分具体细分一些其他的状态。Linux分为一下几种状态,它们存在于一个叫做task_state_array[]的结构体中
static const char *const task_state_array[] = {
"R (running)", /*0 */
"S (sleeping)", /*1 */
"D (disk sleep)", /*2 */
"T (stopped)", /*4 */
"t (tracing stop)", /*8 */
"X (dead)", /*16 */
"Z (zombie)", /*32 */
};
进程状态的查看
我们可以通过ps来查看进程的状态以及进程的信息:ps aux / ps axj 命令

int main()
{int i = 0; while(1)
{ i = 1;
}return 0;
}
命令:ps ajx | head -1 && ps ajx |grep code
不难看出此时code进程是正在运行的,状态为R+。那么如果这里我想要输入但是我还没有输入,进程就会在休眠状态S,也就是阻塞状态。
int main()
{int i = 0;cin>>i;cout<<i<<endl;return 0;
}
此时code进程确实是在休眠状态的。
D状态时特殊的磁盘休眠状态,这种状态下的进程正在等待某个硬件资源(通常是磁盘 I/O 操作)完成,且无法被信号中断,这是一种瞬发的状态,是几乎不会被查看到的,如果系统中出现大量 D 状态进程且长时间无法恢复,通常是系统面临严重问题的信号,甚至可能即将崩溃。
在Linux操作系统中代码如果不执行了也就是进程退出,首先会立即释放对应程序的代码数据信息,会将自己的退出码保留在自己的PCB中,这个PCB不会被释放,必须被OS管理起来,方便未来用户获取进程的退出信息,此时进程的状态就会被设置为Z,僵尸状态,这就类似与一个运动的人突然倒下猝死 ->法医来检测 ->抬走宣告死亡,其中Z是法医检测报告的结果。每个进程在结束时会先处于僵尸状态,为了维持退出信息,方便父进程和操作系统来查询。这里用一个简单的父子进程来查看子进程结束以后的僵尸状态
int main()
{int cnt = 10;pid_t id = fork();if(id == 0){while(cnt){cout<<"子进程 pid: "<<getpid()<<" ppid :"<<getppid()<<endl;cnt--;sleep(1);}}else{while(1){cout<<"父进程 pid: "<<getpid()<<" ppid :"<<getppid()<<endl;sleep(1);}}
}
可以看到子进程在运行10次以后就结束了,但是父进程还没有结束,此时子进程就会进入僵尸状态由S变为Z,如果没有人管就会一直是僵尸状态,必须等待父进程获取信息并回收它才会真正的结束变为X状态。
那么如果一个父进程先结束了,但是子进程还存在着会发生声什么,此时子进程就会变成孤儿进程, 那么是不是就无法结束这个进程然后内存泄露了?这肯定是不对的,此时OS会自动去领养这个孤儿然后作为它的父进程管理它。
这里将父进程循环十次然后就结束了,结束的一瞬间会发现子进程的ppid变为1了,这个1其实就是操作系统。此时直接退出是退出不了这个子进程的,需要使用命令 kill -9 10350才可以退出这个进程。
本文讲的进程状态就到这里了,下一文会讲到进程的优先级,理解为什么需要进程优先级和怎么做到这个优先级,
相关文章:

Linux --进程状态
目录 进程状态(宏观) Linux进程状态 进程状态的查看 进程状态(宏观) 为了了解Linux的进程状态,首先我们得了解进程状态,因为不仅仅是在Linux下有进程状态,macos和windows下都有进程状态,这里先解释的是一个宏观概念下的ÿ…...
如何设计一个支持线上线下的通用订单模块 —— 面向本地生活服务行业的架构思路
一、背景与目标 在本地生活服务行业中,订单模块作为连接用户、商户、商品、支付、履约的核心组件,支撑着平台内多样化的业务形态,例如外卖配送、到店服务、团购核销、即时零售、预约预订、线下消费等。 设计一个可支持线上线下融合的通用订…...

智能手机上用Termux安装php+Nginx
Termux的官方网站:Termux | The main termux site and help pages. 以下是在 Termux 上安装和配置 PHP Nginx 的完整流程总结,包含关键步骤和命令: 一、安装依赖 pkg update && pkg upgrade # 更新包列表和系统pkg install nginx p…...
【线上故障排查】缓存穿透攻击的识别与布隆过滤器(面试题 + 3 步追问应对 + 案例分析)
一、高频面试题 问题1:什么是缓存穿透?它对系统的核心危害是什么? 参考答案:缓存穿透指的是用户请求的数据在缓存和数据库中都不存在,导致请求直接绕过缓存打到数据库。核心危害是大量无效请求会耗尽数据库资源,比如CPU、内存或连接数,严重时可能引发数据库宕机,进而导…...

Visual Studio 调试中 PDB 与图像不匹配
Visual Studio 调试中 PDB 与图像不匹配 在使用 Visual Studio 进行本地或远程调试时,很多开发者会遇到 PDB 加载失败、符号不匹配的问题,甚至程序进程未退出,导致 .exe 文件无法成功覆盖。本文详细解析了从后台进程清理、构建产物验证、模块…...

设计模式——策略设计模式(行为型)
摘要 策略设计模式是一种行为型设计模式,它定义了一系列算法并将每个算法封装起来,使它们可以相互替换。该模式让算法的变化独立于使用算法的客户,从而使得算法可以灵活地切换和扩展。其主要角色包括策略接口、具体策略类和环境类。策略模式…...

保持本地 Git 项目副本与远程仓库完全同步
核心目标: 保持本地 Git 项目副本与 GitHub 远程仓库完全同步。 关键方法: 定期执行 git pull 命令。 操作步骤: 进入项目目录: 在终端/命令行中,使用 cd 命令切换到你的项目文件夹。执行拉取命令: 运行…...
高效Excel数据净化工具:一键清除不可见字符与格式残留
摘要 本文将分享一款基于Python的Excel数据净化工具,用于自动清除给定的Excel文档中指定工作表中的不可见字符、批注、单元格样式等冗余数据。脚本支持进度可视化展示,保留核心数据处理逻辑的同时确保文件格式规整,特别适用于需要规范数据格…...

设计模式——模版方法设计模式(行为型)
摘要 模版方法设计模式是一种行为型设计模式,定义了算法的步骤顺序和整体结构,将某些步骤的具体实现延迟到子类中。它通过抽象类定义模板方法,子类实现抽象步骤,实现代码复用和算法流程控制。该模式适用于有固定流程但部分步骤可…...

Deepin 20.9社区版安装Docker
个人博客地址:Deepin 20.9社区版安装Docker | 一张假钞的真实世界 注意事项 Deepin 20.9 社区版安装 Docker 需要注意两点: 因为某些原因,Docker 官方源基本不可用,所以需要使用镜像源进行安装。当然也可以用安装包直接安装&am…...
Node.js 全栈技术栈的开发者,Web3 面试题
作为一名熟悉 Node.js 全栈技术栈的开发者,在面试 Web3 岗位时,通常会被问到涵盖 区块链原理、智能合约开发、安全性、前后端集成、常用库/协议等方面的问题。下面是我为你整理的 Web3 开发方向面试题清单,尤其适合有 Node.js 背景的全栈工程…...

纯数据挖掘也能发Microbiome?
抗生素滥用导致多重耐药微生物在全球蔓延,但新型抗生素的研发进展缓慢,亟需找到替代抗生素的新型防御策略。抗菌肽(AMPs)作为天然防御分子,具有低耐药潜力和广谱活性。德国小蠊(Blattella germanica&#x…...

2025年05月30日Github流行趋势
项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:13040今日star数:1864项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…...

跨平台猫咪桌宠 BongoCat v0.4.0 绿色版
—————【下 载 地 址】——————— 【本章下载一】:https://pan.xunlei.com/s/VORWH1a7lPhdwvon6DJgKvrNA1?pwdcw2h# 【本章下载二】:https://pan.quark.cn/s/c3ac86f4e296 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
【课堂笔记】标签传播算法Label Propagation Algorithm(LPA)
文章目录 问题背景基本假设算法步骤数学原理解剖算法收敛性 问题背景 标签传播算法(Label Propagation Algorithm, LPA)主要解决的是数据标注不足的实际问题。在许多现实世界的机器学习任务中,获取大量标注数据(即带有正确标签的样…...

Dify案例实战之智能体应用构建(一)
一、部署dify Windows安装Docker部署dify,接入阿里云api-key进行rag测试-CSDN博客 可以参考我的前面文章,创建一个本地dify或者直接dify官网使用一样的(dify官网需要科学上网) 二、Dify案例实战之智能体 2.1 智能面试官 需求;…...

从模式到架构:Java 工厂模式的设计哲学与工程化实践
一、工厂模式概述 (一)定义与核心思想 工厂模式(Factory Pattern)是软件开发中常用的创建型设计模式,其核心思想是将对象的创建过程封装起来,通过工厂类来统一管理对象的创建逻辑。这种模式分离了对象的创…...

docker问题记录
docker pull镜像: 即使配置了镜像源也还是走的国外的镜像源: 解决办法:在pull镜像的时候强制走自己的镜像 比如:拉取rabbitmq,强制使用"https://docker.m.daocloud.io"这个镜像 docker pull docker.m.da…...

设计模式——代理设计模式(结构型)
摘要 本文详细介绍了代理设计模式,包括其定义、结构组成、实现方式、适用场景及实战示例。代理设计模式是一种结构型设计模式,通过代理对象控制对目标对象的访问,可增强功能或延迟加载等。文中通过类图、时序图、静态代理、JDK动态代理、CGL…...
Elasticsearch的集群管理介绍
Elasticsearch 集群管理是确保分布式环境下系统稳定运行、高可用和高性能的关键。以下从集群架构、节点类型、故障转移到监控优化,全面解析 Elasticsearch 集群管理的核心要点: 一、集群架构与节点类型 1. 基本概念 集群(Cluster):由一个或多个节点组成,共同存储数据并…...
Spring MVC + Tomcat 8.5 踩坑实录:Servlet 版本引发的部署失败
🚧 Spring MVC Tomcat 8.5 踩坑实录:Servlet 版本引发的部署失败 🌐 作者:劲爽小猴头 🗓️ 时间:2025-05-28 📚 关键词:Spring MVC、Tomcat、Servlet、WAR部署、web.xml、Maven、JD…...

从“固定“到“流动“:移动充电如何重塑用户体验?
在传统充电模式中,"固定"不仅是技术的特征,更成为用户行为的枷锁——人们需要规划行程、寻找插座、等待电量填满,这种被动适配正在被移动充电技术颠覆。当充电设备从墙面解放,化身可携带的能源胶囊,甚至嵌入…...

玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件
目录 玩客云 OEC/OECT 笔记(1) 拆机刷入Armbian固件玩客云 OEC/OECT 笔记(2) 运行RKNN程序 外观 内部 PCB正面 PCB背面 PCB背面 RK3566 1Gbps PHY 配置 OEC 和 OECT(OEC-turbo) 都是基于瑞芯微 RK3566/RK3568 的网络盒子, 没有HDMI输入输出. 硬件上 OEC 和 OECT…...
docker环境添加安装包持久性更新
1、进入docker 环境 2、安装新的安装包 pip install XXXX3、不要退出docker,新开终端,给当前环境从新打包更新镜像 docker commit ad6e1d2c5869 mynewpythonimagead6e1d2c5869是上面运行中的容器id, docker images 查看mynewpythonimage是新…...

GIS数据类型综合解析
GIS数据类型综合解析 目录 GIS数据类型综合解析1. 总体介绍2. GIS数据类型分类与对比2.1 主要数据类型对比表 3. 详细解析与扩展内容3.1 矢量数据(Vector Data)3.2 栅格数据(Raster Data)3.3 属性数据(Attribute Data&…...
VR 汽车:引领生产与设计的革命性飞跃
在汽车生产设计环节,VR 技术同样发挥着不可替代的重要作用。回首过去,设计师们设计一款新车时,面临着极为繁琐且艰巨的任务。首先,要绘制海量的图纸,从车辆的整体轮廓到每一个零部件的精细构造,都需用精准的…...

Prometheus + Grafana 监控常用服务
一、引言 Prometheus监控常见服务的原理主要包括服务暴露指标和Prometheus抓取指标。一方面,被监控服务通过自身提供的监控接口或借助Exporter将服务的性能指标等数据以HTTP协议的方式暴露出来;另一方面,Prometheus根据配置好的采集任务&…...

6月1日星期日今日早报简报微语报早读
6月1日星期日,农历五月初六,早报#微语早读。 1、10个省份城镇化率超70%,广东城镇人口超9700万; 2、长沙居民起诉太平财险不赔“新冠险”,立案878天后获胜判; 3、海口:全市范围内禁止投放互联…...
盲盒经济2.0:数字藏品开箱是否适用赌博法规
首席数据官高鹏律师团队编著 一、年轻人的“盲盒信仰”,法律的灰色地带 近年来,“盲盒经济”从实体玩具扩展到数字藏品领域,掀起了一波全民开箱热潮。年轻人在社交平台上晒出“开箱暴击”的喜悦,平台方则以“限量发行”“价值赋…...

如何在 Ubuntu 24.04 服务器上安装 Apache Solr
Apache Solr 是一个免费、开源的搜索平台,广泛应用于实时索引。其强大的可扩展性和容错能力使其在高流量互联网场景下表现优异。 Solr 基于 Java 开发,提供了分布式索引、复制、负载均衡及自动故障转移和恢复等功能。 本教程将指导您如何在 Ubuntu 24.…...