Linux--进程的状态
1.进程状态在所有系统中宏观的大致模型
1.1、进程状态与变迁
- 基础状态:涵盖创建、就绪、运行、阻塞、结束等核心状态,描述进程从诞生到消亡的生命周期流转,如创建后进入就绪,争抢 CPU 进入运行,遇 I/O 或资源等待则转阻塞,完成任务或时间片用尽后结束 。
阻塞一般是进程要访问硬件,等待硬件设备回应。进程会加入阻塞队列。
挂起状态一般是,内存爆满了,操作系统为了能让内存放松一点,会吧暂时没用的进程代码和数据暂时放在磁盘空间。
如果磁盘空间也爆满,那OS会选择杀死一些它认为没那么重要的进程。
- 状态转换条件:运行态因时间片耗尽、等待事件(如 I/O)转为就绪 / 阻塞;就绪态获 CPU 调度转为运行;阻塞态等待事件完成转回就绪,清晰呈现状态切换的触发逻辑。
1.2、进程管理数据结构
进程控制块(task_struct):作为进程 “身份证”,存储状态(status)、队列链接(list_node)等关键信息,是操作系统识别、调度进程的核心载体,多个 task_struct 通过链表 / 队列组织,管理进程队列 。
值得注意的是:在task_struct中并不是直接使用task_struct*来连接的,而是在task_struct中有一个叫做list_node的结构体连接,通过类似于struct test *strart= &c-&((struct test*)0->c)这样的运算就可以成功访问到task_struct里面的数据。
运行队列(runqueue):维护就绪进程,包含队列属性(如进程数 num)、链表头(head_node),体现 “CPU - 就绪队列” 的调度关系,保证进程有序争抢 CPU 资源 。
1.3、资源调度逻辑
CPU 调度:基于就绪队列,采用类似 “剥夺式” 策略(如时间片轮转),从队列中选进程分配 CPU,体现 “就绪进程竞争 CPU 运行权” 的核心机制 。
I/O 与外设资源:通过device_list
管理外设(如键盘),进程因访问外设(如等待键盘输入)进入阻塞态,释放 CPU 给其他进程,体现 “资源等待触发状态变迁” 的逻辑 。
内存资源:引入 “交换(swap)” 机制,内存紧张时,操作系统将进程代码 / 数据换出到磁盘(swap out),需用时再换入(swap in),保证内存资源动态平衡,避免因内存不足直接销毁进程 。
1.4、设计思想与隐喻
“调度即算法”:用队列管理、状态变迁简化复杂调度,如 “队列 + 状态” 模型,将进程调度抽象为 “状态判断 + 队列操作”,体现操作系统 “用数据结构(队列) + 算法(调度逻辑)解决资源分配” 的设计思路 。
“资源是关键”:进程状态变迁、队列调度均围绕 “资源(CPU、I/O、内存)” 展开,凸显操作系统 “资源管理者” 的角色 —— 通过状态控制、队列组织,高效分配有限资源,保证系统有序运行 。
2.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 */
};
R运⾏状态(running): 并不意味着进程⼀定在运⾏中,它表明进程要么是在运⾏中要么在运⾏队列⾥。S睡眠状态(sleeping): 意味着进程在等待事件完成(这⾥的睡眠有时候也叫做 可中断睡眠(interruptible sleep))。D磁盘休眠状态(Disk sleep)有时候也叫 不可中断睡眠 状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。T停⽌状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停⽌(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运⾏(一般是有非法操作,但是还不至于被操作系统杀死)。t追踪状态:一般是在程序在调试的时候出现的,调试时其实就是创建一个子进程一步步执行,子进程会出现t状态。X死亡状态(dead):这个状态只是⼀个返回状态,你不会在任务列表⾥看到这个状态。Z僵尸状态
3.进程状态查看
ps aux / ps axj 命令
a:显⽰⼀个终端所有的进程,包括其他⽤⼾的进程。x:显⽰没有控制终端的进程,例如后台运⾏的守护进程。j:显⽰进程归属的进程组ID、会话ID、⽗进程ID,以及与作业控制相关的信息u:以⽤⼾为中⼼的格式显⽰进程信息,提供进程的详细信息,如⽤⼾、CPU和内存使⽤情况等
4. Z(zombie)-僵⼫进程
僵死状态(Zombies)是⼀个⽐较特殊的状态。当进程退出并且⽗进程(使⽤wait()系统调⽤,后⾯讲)没有读取到⼦进程退出的返回代码时就会产⽣僵死(⼫)进程僵死进程会以终⽌状态保持在进程表中,并且会⼀直在等待⽗进程读取退出状态代码。所以,只要⼦进程退出,⽗进程还在运⾏,但⽗进程没有读取⼦进程状态,⼦进程进⼊Z状态
4.1示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
pid_t id = fork();
if(id < 0){
perror("fork");
return 1;
}
else if(id > 0){ //parent
printf("parent[%d] is sleeping...\n", getpid());
sleep(30);
}else{
printf("child[%d] is begin Z...\n", getpid());
sleep(5);
exit(EXIT_SUCCESS);
}
return 0;
}
执行重新后,打开一个新的shell使用该命令可以查看进程。
开始时
子进程结束,但是父进程没回应时
4.2僵⼫进程危害
4.3孤儿进程
为什么要被领养?
因为孤儿进场也会退出,但是父进程已经没了,被系统领养,本质是为了回收孤儿。
相关文章:

Linux--进程的状态
1.进程状态在所有系统中宏观的大致模型 1.1、进程状态与变迁 基础状态:涵盖创建、就绪、运行、阻塞、结束等核心状态,描述进程从诞生到消亡的生命周期流转,如创建后进入就绪,争抢 CPU 进入运行,遇 I/O 或资源等待则转…...

(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
题目:2434. 使用机器人打印字典序最小的字符串 思路:贪心栈,时间复杂度0(n)。 字符串t其实就是栈,后进先出。要让p的字典序最小,那当然是t每次弹出的字符,都小于或等于“剩下未入t里的字符串的字符”&#…...

008-libb64 你有多理解base64?-C++开源库108杰
正确认识二进制数据和文本数据的关系;深刻理解 base64 编码核心等式:256256256 64646464 经常听到——以至 AI 也会这么回答的:base64 编码用于将二进制数据,转换为文本数据。但是,众所周知,在数字电子计算机中&#…...

电子电路基础2(杂乱)
电容器 容抗 滤波电路(半波) 全波整流 因为A点的电压比D点的电压高,所以D点会走向C点 电感基础 什么是电感器? 一种把电能转换成磁能,并可以将磁能存储起来的元器件。 在嵌入式开发中,电感主要用于动态能量…...

LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架
一、软件介绍 文末提供程序和源码下载 LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架,具有隐藏活动的 rootkit、与 Windows/Linux/Mac OSX 兼容的不可检测的可塑植入物,以及自配置后门。凭借其 Web 界面和强大的…...

电脑的ip地址会自动变怎么办?原因解析和解决方法
在当今互联网时代,IP地址是每台联网设备的"身份证",但很多用户都遇到过IP地址自动变化的情况。这种现象既可能发生在内网(局域网)环境中,也可能出现在外网(公网)连接中。要理解IP地址…...

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)
在填充 PDF 中的图形时(以及许多其他技术中),你可以选择使用 Even-Odd(奇偶) 或 Non-Zero(非零) 填充规则。 对于那些已经在想“你在说啥?”的朋友,别担心,我…...
C++.OpenGL (5/64)变换(Transformation)
变换(Transformation) 变换矩阵核心概念 #mermaid-svg-OvPP9vqkY9MRAHyd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-icon{fill:#552222;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-tex…...
优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?
磁盘优化 磁盘清理: 使用系统自带的磁盘清理工具(如Windows的“磁盘清理”)删除不必要的文件。清空回收站。删除临时文件和缓存。 磁盘碎片整理(针对机械硬盘): 定期进行磁盘碎片整理,以提高文…...

【八股消消乐】MySQL参数优化大汇总
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点ÿ…...
JavaSec-SPEL - 表达式注入
简介 SPEL(Spring Expression Language):SPEL是Spring表达式语言,允许在运行时动态查询和操作对象属性、调用方法等,类似于Struts2中的OGNL表达式。当参数未经过滤时,攻击者可以注入恶意的SPEL表达式,从而执行任意代码…...
在 Caliper 中执行不同合约的方法
在 Caliper 中执行不同的智能合约需要通过正确配置工作负载(workload)和测试轮次(rounds),下面我将详细介绍如何执行不同的合约。 1. 通过 config.yaml 配置不同测试轮次 你可以在 config.yaml 中为不同的合约定义不同的测试轮次: rounds:- label: test-helloworlddescript…...

CSS 平铺+自动换行效果
先上效果图 样式 <template><div class"activity-questions"><h1>活动题库</h1><div v-if"loading" class"loading">加载中...</div><div v-else><div v-if"questions.length 0" clas…...

微服务网关SpringCloudGateway+SaToken鉴权
目录 概念 前置知识回顾 拿到UserInfo 用于自定义权限和角色的获取逻辑 最后进行要进行 satoken 过滤器全局配置 概念 做权限认证的时候 我们首先要明确两点 我们需要的角色有几种 我们需要的权限有几种 角色 分两种 ADMIN 管理员 :可管理商品 CUSTIOMER 普通…...

永磁同步电机控制算法--模糊PI转速控制器
一、原理介绍 在常规的PID控制系统的基础上提出了一种模糊PID以及矢量变换方法相结合的控制系统,经过仿真分析对比证明: 模糊PID控制系统能够有效的提高永磁同步电机的转速响应速度,降低转矩脉动,增强了整体控制系统的抗干扰能力…...

Elasticsearch集群最大分片数设置详解:从问题到解决方案
目录 前言 1 问题背景:重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)? 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少? 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…...
计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结
基于MATLAB的图像特征提取与匹配算法全面指南 图像特征提取与匹配 基于MATLAB的图像特征提取与匹配算法全面指南一、图像特征提取基础特征类型分类二、点特征提取算法1. Harris角点检测2. SIFT (尺度不变特征变换)3. SURF (加速鲁棒特征)4. FAST角点检测5. ORB (Oriented FAST …...

DVWA全靶场
目录 暴破 Low - 万能密码 Medium - 转义 High - Token Impossible 命令注入 CSRF跨站请求伪造 - 抓包 Low Medium - 域名限制 High - 域名限制xss 文件包含 - 页面点点点 Low Medium - 过滤http:// High - file Impossible - 写死 文件上传 Low Medium - 文件…...

【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测
C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测 C2FDrone: Coarse-to-Fine Drone-to-Drone Detection using Vision Transformer Networks 论文链接 摘要 摘要——基于视觉的无人机间检测系统在碰撞规避、反制敌对无人机和搜救行动等应用中至关重要。然…...

Android 本地存储路径说明
一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时,SD卡根目录会…...
Git 推送失败解决教程——error: failed to push some refs to
🚧 Git 推送失败解决教程: 错误信息: error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.🧠 问题原因简述: 你的本地分支试图将…...
spark 执行 hive sql数据丢失
spark-sql 丢失数据 1.通过spark执行hive sql 的时候,发现 hive 四条数据,spark 执行结果只有两条数据 目标对应的两条数据丢失 select date, user_id, pay from dim.isr_pay_failed where user_id ‘*******’ hive-sql 结果…...

国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计
方案概述 本设计以国微PCIe Switch 8748为核心交换芯片,通过多端口PCIe 4.0/5.0通道连接飞腾ARM架构处理器、龙芯LoongArch处理器及昇腾AI加速卡,构建支持NVMe协议的高速存储集群,目标实现6.5GB/s以上的可持续带宽。 硬件架构 处理器选型 飞…...
【Qt】:设置新建类模板
完整的头文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷贝构造和赋值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…...

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)
您是否曾经想更改网站外观的某些方面,但不知道怎么做?有一个解决方案——您可以将自定义 CSS(层叠样式表)添加到您的WordPress网站! 在本文中,我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…...

开始在本地部署自己的 Gitea 服务器
0.简介 在软件开发和团队协作中,代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅,这个软件已经很久没有更新了。经过多方考察,发现Gitea 是一款轻量级的开源代码托管平台,具有易于部署、资源占用少、功能丰富…...

7.2.1_顺序查找
知识总览: 顺序查找: 算法思想: 从头到脚挨个找或者从脚到头挨个找适用于线性表(顺序存储和链式存储都适用),又叫线性查找 实现: 1个数组elem指向数组的起始位置,索引从0开始遍历数组直到找到目标值返回…...
spring重试机制
数据库死锁处理与重试机制实现指南 1. 业务场景 1.1 问题现象 高并发批量数据处理时频繁出现数据库死锁主要发生在"先删除历史数据,再重新计算"的业务流程中原有逐条处理方式:list.forEach(item -> { delete(); calculate(); }) 1.2 死…...
C语言的全称:(25/6/6)
C语言,全称为"C Programming Language"(C程序设计语言),是一种广泛使用的计算机编程语言。它是由Dennis Ritchie于1972年在贝尔实验室设计的,继承了B语言的许多思想,并加入了数据类型的概念及其他…...

智能制造数字孪生全要素交付一张网:智造中枢,孪生领航,共建智造生态共同体
在制造业转型升级的浪潮中,数字孪生技术正成为推动行业变革的核心引擎。从特斯拉通过数字孪生体实现车辆全生命周期优化,到海尔卡奥斯工业互联网平台赋能千行百业,数字孪生技术已从概念验证走向规模化落地。通过构建覆盖全国的交付网络&#…...