【Linux】进程状态(阻塞、挂起、僵尸进程)
文章目录
- 1 阻塞与挂起
- 1.1 阻塞
- 1.2 挂起
- 2 进程状态
前言:
当我们在Windows下双击运行一个程序,或是在Linux下通过./加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当我们加载运行一个程序时,并不表示其对应的进程就是一直在运行的,以Windows下运行程序来说,我们可以打开多个软件(多个应用)“同时”运行,但实际上,这些进程并不是同时处在运行状态的,CPU会不断切换调度每个需要运行的进程(分时运行),由于其切换调度的速度远超人的感知范围,因此会让人觉得所有程序在同时运行。在Linux内核里,进程有时也叫做任务,如下是kernel源代码中定义的不同的进程状态,也是本文接下来要讲述的内容。
Linux内核中进程状态定义:
/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
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 */
};
1 阻塞与挂起
1.1 阻塞
阻塞: 进程因为等待某种条件(
资源)就绪,而导致的一种不推进的状态(如我们常说的卡住了一般:页面无法响应、因网络中断下载任务无法继续执行等)。或者说,阻塞就是当前进程不被CPU调度。事实上,进程要通过等待的方式,等某个具体的资源被别人用完或者有了某个资源之后,再使用该资源。
我们知道,操作系统对软硬件做管理,其方式可以被总结为:先描述,再组织 。其中进程被描述为结构体 task_struct ,硬件被管理时同样也是被描述为一个结构体如 struct dev ,每个软硬件对应的结构体中都包括了关于自身的信息。值得注意的是,在每个硬件对应的结构体中还包含了指向进程控制块 PCB(task_struct) 的指针,可以认为该指针指向了一个进程队列的队头,通过该指针可以对某个进程队列进行管理。事实上,一个进程处在运行状态时,可以表示该进程处在CPU进程调度的运行队列中,而当某个进程因等待某种资源而无法继续推进时(通常是等待某种硬件资源,如磁盘、网卡、键盘等),CPU就会将该进程调出当前的运行队列,并调入其所等待资源对应的等待队列中(此时该进程就处在一种 阻塞 状态。换句话说,当某个进程处于阻塞状态时,就表示该进程对应的结构体 task_struct 正在某种被操作系统管理的资源下排队),当该资源准备就绪后,再将该进程调回CPU的运行队列中继续排队运行。

1.2 挂起
挂起: 当因为等待某种资源就绪,进程对应PCB由运行队列转至资源下的等待队列时,考虑到内存空间紧张,CPU会将因为等待而暂时无法运行的进程对应的代码和数据先由内存转移到磁盘中,此时进程即为挂起状态,等到该进程可以被运行时再将对应的代码和数据由磁盘转移回内存中。

2 进程状态

-
R(running)运行状态
当进程处于 R 状态时,并不表示该进程一定在运行中,它表示了该进程要么是在运行中,要么是在运行队列中排队。 -
S(sleeping)睡眠状态
意味着进程在等待某种资源就绪,该状态有时也称为 可中断睡眠状态(interruptible sleep) ,其本质就是一种阻塞状态。 -
D(disk sleep)磁盘休眠状态
有时也称为 不可中断睡眠状态(uninterruptible sleep) ,在这个状态的进程通常会等待IO的结束。一旦一个进程处于D状态,则该进程不可被杀死,只有当该进程主动 “醒来(切换为其它状态)” ,其才能被终止。在绝大部分情况下都不会出现D状态,哪怕出现了一个D状态的进程,则表示当前的系统濒临崩溃。因为在正常情况下,D状态只是一瞬间的状态,而出现该状态则表示当前磁盘空间严重不足,磁盘无法满足数据写入的需求,所以对应进程只能一直等待,进而出现D状态,若此时再出现几个D状态进程,系统就很可能崩溃死机,最后只能重启。
示例:
这里编写了一个死循环代码 test01.c ,通过 ./ 的方式运行编译生成的二进制文件 mytest 后,通过命令 ps axj | head -1 && ps axj | grep mytest | grep -v grep 查看对应的进程状态如下:

可以发现:虽然该进程看上去似乎一直在运行,但所显示的进程状态却表示其处于 S+(睡眠状态) 。这是由于在这段死循环中代码中,我们需要显示器资源来显示输出内容(这是一个进程!),显然显示器资源不会一直只供该进程使用,即该进程的运行需要等待显示器资源的就绪,也就是上述所说的睡眠状态。
下面我们又将代码中的输出语句注释,使该死循环中为空,重新编译运行,再次查看相应进程状态,此时可以看到,该进程处于 R+(运行状态) ,这是因为此时该进程不需要等待某个资源就绪,因此其一直处于运行状态。

需要注意: 与上述所说的 R / S 状态不同,这里示例中所显示的状态都多了一个 + 号,这是表示该进程在前台运行,此时,我们可以通过 Ctrl + C 的方式来终止进程;如果没有 + 号,则表示该进程在后台运行,此时可以通过 kill -9 进程PID 的方式来终止进程。
T(stopped)停止状态
可以通过kill命令发送 SIGSTOP 信号给进程来使其进入停止状态。被暂停的进程可以再通过发送 SIGCONT 信号让进程继续运行。

示例:

t(tracing stop)追踪状态
当进程正在被跟踪时,就处于 t 这个特殊状态,其本质上也是一种停止状态。例如调试程序时,触发断点而停止运行,此时对应进程就处在 t 状态。
示例:

X(dead)死亡状态
该状态只是一个返回状态(瞬时状态),我们不会在任务列表里看到这个状态。事实上,我们创建进程,无非是想通过进程完成一些任务,而对于任务完成结果,我们可能关心,也可能不关心,这就涉及到一个概念 –退出码。所谓退出码,其实就是我们编写的代码中最常见的main()主函数中的{return 0}(也就是return的那个数字),我们可以通过echo $?命令来查看进程退出码。
示例:

Z(zombie)僵尸状态 / 僵尸进程-
僵尸状态是一个比较特殊的状态。当进程退出并且父进程(使用wait() 系统调用)没有读取到子进程退出的返回代码时就会出现僵尸状态。 -
僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。
-
只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程就会进入僵尸状态。
示例:

-
僵尸进程的危害
- 进程的退出状态必须被维持下去,因为它要告诉关心它的进程(父进程),你交给我的任务,我办的怎么样了。可如果父进程一直不读取子进程状态,那子进程就会一直处于僵尸状态。
- 维护退出状态本身需要用数据维护,也属于进程基本信息,所以保存在
task_struct(PCB)中,换句话说,僵尸状态一直持续,其进程对应 PCB 就需要一直被维护。 - 如果一个父进程创建了很多子进程,但就是不回收,将造成内存资源的浪费(内存泄漏),因为数据结构对象本身就要占用内存。
-
以上是我对Linux中进程状态相关的一些学习记录总结,如有错误,希望大家帮忙指正,也欢迎大家给予建议和讨论,谢谢!
相关文章:
【Linux】进程状态(阻塞、挂起、僵尸进程)
文章目录1 阻塞与挂起1.1 阻塞1.2 挂起2 进程状态前言: 当我们在Windows下双击运行一个程序,或是在Linux下通过 ./ 加载运行一个程序,是否就代表对应的进程就一直处在运行状态呢?其实不然,一个进程有许多不同的状态。当…...
规约第二章
文章目录有限域的定义Definition of Finite Field单位元运算举例素数域群阿贝尔群阿贝尔循环群循环子群阿贝尔循环群且阶是素数的有限域的定义Definition of Finite Field 单位元 这里一般只需要记住2个0,1 。0是加法的单位元,1是乘法的单位元。以及逆…...
2019年MathorCup数学建模C题汽配件制造业中的生产排程问题解题全过程文档及程序
2019年第九届MathorCup高校数学建模挑战赛 C题 汽配件制造业中的生产排程问题 原题再现: 整体求解过程概述(摘要) 随着市场竞争日趋激烈,企业开始更加注重低费高效,因此生产排程问题成为众多制造企业关注的热点之一。其中,制造行…...
ARM uboot 的移植3 -从 uboot 官方标准uboot开始移植
一、选择合适的官方原版 uboot 1、官方原版 uboot 的版本 (1) 版本号。刚开始是 1.3.4 样式,后来变成 2009.08 样式。 (2) 新版和旧版的差别。uboot 的架构很早就定下来了,然后里面普遍公用的东西(common 目录下、drivers 目录下、fs 目录…...
华为OD机试 - 快递货车(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:快递货车…...
连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建
NebulaGraph 社区如何构建工具让 Slack、WeChat 中宝贵的群聊讨论同步到公共领域。 要开放,不要封闭 在开源社区中,开放的一个重要意义是社区内的沟通、讨论应该是透明、包容并且方便所有成员访问的。这意味着社区中的任何人都应该能够参与讨论和决策过…...
数据中台架构体系理解
目前,大部分企业更倾向于数据集中采集、存储,并应用分层建设。这种方式一方面有利于应用系统的快速部署,另一方面也保证了数据的集中管理与运营,体现数据的资产、资源属性。 数据中台的出现弥补了数据开发和应用开发之间由于开发…...
高并发性能指标:QPS、TPS、RT、并发数、吞吐量
QPS(每秒查询) QPS:Queries Per Second意思是“每秒查询率”,一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准 互联网中,作为域名系统服务器的机器的性…...
【微信小程序】-- 案例 - 本地生活(列表页面)(三十)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
华为OD机试题,用 Java 解【一种字符串压缩表示的解压】问题
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...
所有科研人警惕,掠夺型期刊和劫持型期刊的区别,千万别投错了
当今,新形式的学术出版物——例如数字式或开源式的学术期刊日益普及,热门期刊的数量逐年增长【1】。 人们获取学术出版物也越来越容易,使得更多的科研人员(特别是在低收入国家)能够及时了解各自研究领域的最新发展态势…...
超详细CentOS7 NAT模式(有图形化界面)网络配置
在此附上CentOS7(有可视化界面版)安装教程 超详细VMware CentOS7(有可视化界面版)安装教程 打开VMware—>点击编辑---->选择虚拟网络编辑器 打开虚拟网络编辑器后如下图所示: 从下图中我们看到最下面子网IP为…...
华为OD机试题,用 Java 解【英文输入法】问题
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...
【Redis】主从集群 实现读写分离(二)
目录 2.Redis主从 2.1.搭建主从架构 2.2.主从数据同步原理 2.2.1.全量同步 2.2.2.增量同步 2.2.3.repl_backlog原理 2.3.主从同步优化 2.4.小结 2.Redis主从 2.1.搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,…...
【JavaEE】前后端分离实现博客系统(页面构建)
文章目录1 效果展示1.1 博客登录页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面2 页面具体实现2.1 博客列表页的实现2.2 博客详情页的实现2.3 博客登录页面的实现2.4 博客编辑页面的实现写在最后1 效果展示 1.1 博客登录页面 用于实现用户的登录功能,并展…...
MyBatis的基本使用
MyBatis 为啥MyBatis会使用xml 在一个程序中,若需要操作数据表,那么 SQL 语句有两种存放方式:1. 放到 Java 类里面(这个就存在大量的字符串拼接,还有占位符需要处理-----JDBC);2:放…...
看完书上的链表还不会实现?不进来看看?
1.1链表的概念定义:链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。特点:链表由一系列节点组成,节点在运行时动态生成 (malloc),…...
【批处理脚本】-3.2-call命令详解
"><--点击返回「批处理BAT从入门到精通」总目录--> 共5页精讲(列举了所有call的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...
华为OD机试题,用 Java 解【寻找相同子串】问题
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…...
思腾合力深思系列 | 四款高性能 AI 服务器
深思系列 AI 服务器涵盖多种 CPU 平台,支持按客户需求预装 OS、驱动、DL 框架、常用 DL 库,节省您大量的前期调试时间,开机即用。 一个简单的任务,若想要在 AI 的脑中形成清晰的思路,需要大量的实验和练习。从 AI 训练…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...
