Linux操作系统:进程状态
一、操作系统通用进程三大基础状态
无论 Windows、Linux、macOS,现代操作系统底层都遵循三大基础进程状态模型,这是Linux细化进程状态的底层原理。就绪、阻塞,本质是不了解操作系统的队列调度机制。本节我结合硬件队列、通俗实例深度拆解,明确区分易混淆概念,同时详解挂起分类及内存溢出处理逻辑。
先记住核心前提:操作系统会给不同状态的进程维护不同的双向链表队列,进程本质就是在各个队列之间来回切换。
1. 运行态(Running)& 就绪态(Ready)
很多教材简化把二者合并为运行大类,这也是最容易混淆的点。严格意义上,运行大类分为真正运行态和就绪态,两个状态进程都不缺资源,唯一区别:有没有占用物理CPU。
但是在Linux内核中这两个这其实又可以混为一谈,这按照操作系统大部分教材来讲解。
(1)真正运行态
定义:进程此刻正在物理CPU核心上执行代码指令,实实在在占用CPU资源。
队列归属:挂载在CPU运行双向队列,一个CPU核心同一时刻只能存放一个运行态进程。
实例:前文测试代码死循环程序,被系统调度分配给CPU0核心,此刻CPU正在执行该程序指令,该进程处于真正运行态。
(2)就绪态
定义:进程所有资源全部准备完毕(内存、数据、权限齐全),只差CPU时间片,只要CPU空闲,立刻可以执行。
队列归属:挂载在系统就绪等待队列,排队等待CPU调度,队列遵循时间片轮转调度规则。
实例:电脑同时打开浏览器、编辑器、终端,CPU正在运行浏览器,剩下的软件全部处于就绪态,排在就绪队列中等待CPU切换执行。
二者核心区别总结
-
真正运行:占着CPU,正在干活;
-
就绪态:万事俱备,排队等CPU;
-
共性:不会主动放弃CPU,无阻塞、无等待。
2. 阻塞态(Blocked / 等待态)
阻塞态是进程主动放弃CPU的状态,进程因为缺少某类资源、等待外部事件,主动进入休眠,即便CPU空闲也不会执行。此时进程完全脱离CPU调度体系,不占用CPU算力。
队列归属
不会挂载在CPU相关队列,而是挂载在各类硬件资源等待队列,不同等待事件对应不同队列。
典型队列+实例
-
键盘等待队列:程序卡住等待用户输入字符(scanf输入、终端输入密码),进程挂在键盘队列;
-
磁盘IO队列:程序读取本地超大文件、拷贝硬盘数据,进程挂在磁盘读写队列;
-
网络队列:网页请求、接口调用,等待服务器返回数据,进程挂在网卡等待队列;
-
休眠队列:代码执行sleep()函数,进程挂在系统休眠定时队列。
状态特点
阻塞态进程不参与CPU竞争,等待的事件完成后,不会直接进入运行态,而是先转为就绪态,重新排队等待CPU调度。
3. 挂起态(Suspend)—— 内存应急机制
前面的运行、就绪、阻塞,进程数据都存放在物理内存中;而挂起态是操作系统的内存自救机制:当物理内存严重不足、内存占用率过高时,系统会将暂时不用的进程数据拷贝转移到磁盘Swap交换分区,腾出物理内存给高频使用的进程。这里补充一个必考底层原理:进程被挂起时,仅把进程的程序代码、运行数据置换到Swap磁盘分区;而该进程的PCB(进程控制块)永远保留在物理内存中,依旧挂在原有队列正常排队,不会被置换。操作系统调度轮询到该PCB时,会识别挂起标记,自动从Swap分区中将代码、数据召回至物理内存,恢复进程状态。
挂起后进程冻结、暂时不参与调度,根据进程原本的状态,严格分为就绪挂起和阻塞挂起两类。
(1)就绪挂起(外存就绪)
触发条件:原本处于【就绪态】的进程,长期排队得不到CPU,且内存紧张。
状态逻辑:进程资源齐全、可以运行,但是被挪到磁盘中。一旦内存空闲,直接调入内存转为就绪态,无需等待其他资源。
实例:后台挂着长期未打开的软件,内存吃紧时,系统将其挪至磁盘,属于就绪挂起。
(2)阻塞挂起(外存阻塞)
触发条件:原本处于【阻塞态】的进程,正在等待IO资源,长时间无响应,内存不足。
状态逻辑:进程本身还在等待外部事件,同时被挪到磁盘。即便等待的事件完成,也需要先调入内存,再转为就绪态。
实例:正在加载网络图片的程序,网络卡顿+内存爆满,系统将其转移至磁盘,属于阻塞挂起。
重点问题:挂起后内存还是不够,会杀死进程吗?
这是面试高频追问,我直白给出底层逻辑:
-
普通内存紧张:优先挂起闲置进程,不会杀死任何进程;
-
极端内存溢出(OOM):挂起所有可挂起进程后,内存仍然不足,Linux系统会触发OOM Killer机制;
-
杀死规则:系统不会乱杀,优先杀掉占用内存大、优先级低、长时间闲置的进程,保留系统核心进程、高优先级业务进程;
-
特殊说明:内核态关键进程永远不会被杀死,防止系统崩溃宕机。
为方便直观区分,两类挂起对比:
1、就绪挂起:能运行、在磁盘、缺内存; 2、阻塞挂起:不能运行、在磁盘、缺资源+缺内存。
完整流转逻辑:①运行态缺资源→阻塞态;②阻塞态事件完成→就绪态;③就绪态分配CPU→运行态;④内存紧张时,就绪态→就绪挂起、阻塞态→阻塞挂起;⑤挂起进程回流:内存空闲,就绪挂起→就绪态、阻塞挂起→阻塞态;⑥极端内存溢出:触发OOM机制杀死低优先级进程。
补充知识点:无法被用户信号杀死的进程
结合挂起、阻塞底层原理,这里重点说明:Linux中有两类进程普通信号(包含kill -9)无法杀死,最典型的就是深度睡眠进程(D态),同时结合挂起机制补充说明原因,贴合PCB队列规则:
-
1. 深度睡眠进程(D 不可中断休眠) 为什么杀不死?该类进程PCB挂载在磁盘硬件IO等待队列,此时进程正处于内核态,正在和磁盘进行数据读写、数据同步。为了防止磁盘数据错乱、文件损坏、数据丢失,Linux内核硬性屏蔽所有用户层信号。哪怕使用kill -9强制杀死信号,内核也不会响应。 唯一解除方式:等待磁盘IO读写完成、自动脱离D态;极端情况下只能重启服务器。
-
2. 处于挂起状态的内核级进程 为什么杀不死?系统核心进程被挪入Swap挂起后,PCB带有内核保护标记,用于保障系统基础运行。用户权限无法修改、删除该类PCB,无法发送终止信号,防止系统崩溃。
总结区分:普通S态可中断睡眠可以被杀死;D态深度睡眠绝对杀不死,本质原因:内核态IO操作+数据一致性保护,屏蔽所有用户信号。
进程状态总结
所有操作系统进程状态,唯一区分判定标准:当前进程的PCB挂载在哪一个硬件对应的等待队列中,该进程就是什么状态,没有例外:
-
PCB挂载在CPU双向调度队列:为运行态/就绪态(占用/排队等CPU,不缺资源);
-
PCB挂载在外设硬件等待队列(键盘、磁盘、网卡、休眠队列):为阻塞态(等待外部资源,主动放弃CPU);
-
PCB保留在内存、代码数据挪入Swap磁盘队列:为挂起态(内存不足,进程冻结外存)。
-
具体到Linux中的struct task_strcut在同一时间只会有一种主状态(R/S/D/T/t/X/Z)
只要看懂PCB挂在哪个队列,就能一秒判断进程状态,这是操作系统进程状态最底层的核心逻辑。
二、Linux 下详细进程状态(R/S/D/T/t/X/Z)
Linux 在通用三大状态基础上,细化出8种真实运行状态,我们日常使用 ps、top 命令看到的状态标识全部包含在内。下面逐个讲解,每种状态附带C语言测试代码+查看命令,零基础也能复现。
前置查看命令:所有代码编译运行后,新开终端执行以下命令查看进程状态:
![]()
为了弄明⽩正在运⾏的进程是什么意思,我们需要知道进程的不同状态。⼀个进程可以有⼏个状
态(在Linux内核⾥,进程有时候也叫做任务)。
下⾯的状态在kernel源代码⾥定义:

1. R:运行态(TASK_RUNNING)
状态说明
包含两种情况:正在CPU上运行、处于就绪队列等待CPU调度。CPU密集型程序常驻R态,无任何休眠、阻塞操作。
测试代码(test_R.c)
补充标识
R+:前台运行;R:后台就绪。
2. S:可中断睡眠态(TASK_INTERRUPTIBLE)
状态说明
最常见的阻塞状态,进程等待某事件(输入、信号、休眠、IO输出),可以被信号唤醒。日常大部分后台常驻程序、bash终端都处于S态。
这里重点讲解一个误区:本段代码为死循环打印,看似一直占用CPU运算,理应是R运行态,但我们使用ps/top查看时,绝大多数情况下都是S态,极小概率捕捉到R态,下面结合硬件速度差+PCB队列规则透彻解释原理。
测试代码(test_S.c)
底层原理:CPU运算速度远远快于显示器这类外部IO外设速度。程序运行时会出现两种状态切换:①代码执行运算、往缓冲区写入字符时,进程PCB挂载在CPU调度队列,此时为R运行态,这个过程极其短暂;②当printf需要将缓冲区数据刷新到显示器、等待外设完成IO刷新时,进程主动放弃CPU,PCB挂载到显示器外设等待队列,进入S可中断休眠态。由于显示器刷新速度极慢,进程99%的时间都在等待IO完成。而ps、top命令属于采样检测,瞬间采样的那一刻几乎都命中等待IO的阶段,所以我们看到的状态永久为S,只有极小概率捕捉到一瞬间的R态。再次印证全文核心规则:PCB挂在外设等待队列,就是阻塞S态。
最终现象:程序持续打印内容,绝大多数时刻查看状态为S,只有极低概率捕捉到转瞬即逝的R态;该进程可以使用 kill -15 PID 直接终止。
3. D:不可中断磁盘休眠态(TASK_UNINTERRUPTIBLE)——深度睡眠
状态说明:什么是深度睡眠?
D态全称不可中断休眠态,俗称深度睡眠。它属于阻塞态的一种,是Linux为硬件IO数据安全专门设计的特殊阻塞状态。深度睡眠定义:进程当前处于内核态,正在进行硬件IO交互(绝大多数为磁盘读写),进程被内核设置为不可被任何用户信号中断,哪怕使用 kill -9 强制杀死信号、重启进程都无法终止该进程。
结合全文核心队列规则:处于D态的进程,PCB会被强制挂载在磁盘硬件专属IO等待队列,不参与CPU调度、不占用CPU,且该队列内的进程被内核加锁保护。
深度睡眠(D态)是怎么形成的?(完整形成流程)
我们以进程读取硬盘文件为例,一步步拆解D态形成底层过程:
-
步骤1:用户态发起IO请求 应用程序(用户态)需要读取硬盘中的文件,调用系统调用函数,向Linux内核发起磁盘读写请求。
-
步骤2:切换至内核态 CPU从用户态切换为内核态,由内核接管本次磁盘IO操作,开始操作硬件磁盘。
-
步骤3:进程主动放弃CPU 磁盘硬件读写速度远慢于CPU,CPU不需要空等磁盘,内核会将当前进程主动剥离CPU调度队列。
-
步骤4:挂载磁盘IO队列、标记D态 内核将该进程的PCB挂载到磁盘硬件IO等待队列,同时给PCB打上不可中断标记,进程正式进入D态深度睡眠。
-
步骤5:静默等待IO完成 进程静止等待磁盘读写完毕,期间不响应任何外部信号,不会被CPU调度。
为什么D态进程无法被杀死?
为什么kill -9都杀不掉深度睡眠进程?底层核心两点原因:
-
1、处于内核态,屏蔽用户信号:D态进程全程运行在内核态,Linux内核为了保护硬件,硬性屏蔽所有用户层发送的终止信号,kill命令属于用户层指令,完全无法穿透内核权限。
-
2、保证磁盘数据一致性:此时进程正在和磁盘交换数据,如果强行打断,会造成磁盘文件损坏、数据丢失、磁盘坏道。内核为了硬件数据安全,禁止强制中断IO流程。
常见触发场景 & 解除方式
-
常见场景:机械硬盘读写大文件、U盘拷贝数据、服务器磁盘卡顿、磁盘坏道检测、内存交换Swap读写。
-
正常解除方式:等待磁盘IO读写全部完成,内核自动解除PCB锁定,进程从磁盘队列剥离,转为就绪态,重新排队等待CPU。
-
极端解除方式:磁盘卡死、IO永久阻塞,只能重启服务器,无任何软件命令可以杀死。
补充:S态浅睡眠 和 D态深度睡眠 核心区别
-
S浅睡眠:等待软件资源、网络、休眠、显示器IO,可被信号杀死,安全灵活;
-
D深度睡眠:等待硬件磁盘IO,内核加锁保护,不可被杀死,优先级最高。
高阶阻塞状态,进程正在等待磁盘IO(读写硬盘、加载文件),无法被信号杀死,不能中断。服务器卡顿、卡死大概率出现D态进程,只能等待IO完成或重启服务器。
4. T:暂停停止态(TASK_STOPPED)
状态说明
进程被手动暂停,挂起停止运行,资源保留,可恢复执行。一般由手动发送暂停信号触发。
复现步骤
-
运行前文S态测试程序:
./test_S -
新开终端查询PID,执行暂停命令:
kill -19 PID -
查看状态变为T,进程暂停
-
恢复命令:
kill -18 PID
5. t:追踪停止态(TASK_TRACED)
状态说明
调试专属状态,进程被gdb等调试工具挂载追踪,断点暂停时显示t态。开发调试经常出现。
6. X:死亡退出态(TASK_DEAD)
状态说明
进程执行完毕,资源完全释放,彻底消亡。该状态转瞬即逝,正常服务器几乎捕捉不到,仅内核层面短暂留存。
7. Z:僵尸态(TASK_ZOMBIE)
状态说明
僵尸进程是Linux非常特殊的进程死亡状态,严格遵循本文全程强调的PCB队列判定法则:当一个子进程正常/异常退出后,操作系统会自动回收该子进程的代码段、堆、栈、文件描述符、缓冲区等所有运行时资源,但是不会释放该子进程的PCB进程控制块。该残留PCB会被操作系统挂载到系统专属的僵尸进程等待队列中,静止常驻内存。出现该现象的核心原因是:Linux规定子进程退出后的退出状态信息(退出码、终止信号等)必须由父进程主动读取回收,只要父进程没有调用wait()/waitpid()接口读取子进程退出信息、没有手动释放PCB,这块PCB就会一直占用物理内存,无法被系统自动回收销毁。僵尸进程本身不执行任何代码、不占用CPU算力,仅残留一块PCB结构体占用极小内存;但大量僵尸进程堆积会造成内存碎片化、占用进程PID资源,严重时系统无法创建新进程。
测试代码(test_Z.c)
现象
运行时间轴&现象详解:
-
0~5秒:父进程、子进程均执行sleep,全部处于S可中断睡眠态;
-
第5秒:子进程执行exit退出,进程代码、运行数据全部释放,但是PCB进程控制块保留在内存中,挂载至僵尸进程队列,转变为Z僵尸态;
-
5~30秒:父进程仍在休眠,没有调用wait/waitpid回收子进程PCB,僵尸进程会一直存在;
-
30秒后:父进程休眠结束,程序运行完毕,操作系统自动回收残留的子进程PCB,僵尸进程消失。
僵尸进程三大核心问题
1、进程退出了,退出信息是什么?
进程退出信息是操作系统记录该进程终止的状态描述信息,用来告知父进程本次子进程运行结果,主要包含以下内容:
-
退出码:正常退出时的返回值(代码中 return 、exit() 传递的数值,一般0代表运行成功,非0代表异常);
-
终止信号:进程是否被信号杀死(例如被kill、段错误、非法指令终止);
-
终止原因:区分正常退出、异常崩溃、被外部信号终止;
-
运行统计信息:进程占用CPU时长、内存使用峰值等简单资源统计。
2、进程退出后,退出信息保存在哪里?
严格贴合全文底层逻辑:所有退出信息全部存放在该子进程的PCB(进程控制块)中。
子进程执行exit退出后:进程代码、堆、栈、缓冲区等所有运行数据全部被操作系统回收释放;唯独PCB保留在物理内存,而刚才所说的退出码、终止信号、退出原因全部固化储存在PCB内部结构体中。同时该PCB会被移入系统僵尸进程等待队列,静止排队等待父进程读取。
3、检查Z状态进程、回收Z状态进程,本质是在做什么?
(1)查看/检查Z状态进程(ps命令)本质:
遍历操作系统的僵尸进程队列,扫描队列中残留的PCB,识别PCB中的进程状态标记,只要标记为Z,就判定为僵尸进程。
(2)父进程调用wait/waitpid回收僵尸进程本质:
-
第一步:读取信息:父进程从子进程残留的PCB中,读取保存好的退出码、终止信号等退出信息;
-
第二步:摘除队列:将该PCB从僵尸等待队列中摘除;
-
第三步:彻底释放:将PCB本身占用的内存资源彻底释放,归还给操作系统;
一句话总结回收本质:读取PCB退出信息 + 释放PCB内存。
结合队列原理补充
僵尸进程依旧遵循本文核心判定规则:子进程执行结束后,数据代码被释放,仅PCB保留在内存,挂载在系统僵尸等待队列中;由于父进程未读取退出状态、未回收PCB,该PCB会一直占用内存,直到父进程终止。kill -9 无法杀死僵尸进程,因为进程本身已经死亡,唯一解决方式:杀死父进程或者父进程主动回收。
8.孤儿进程(Orphan Process)
(1)什么是孤儿进程?
在Linux系统中,父进程先于子进程退出、终止,导致原本的子进程失去父进程,没有父进程管辖的子进程,叫做孤儿进程。
结合全文PCB队列底层逻辑:子进程PCB原本挂载在父进程管理队列下,一旦父进程退出被系统彻底回收,子进程失去上级管理引用,操作系统会自动干预处理。
(2)孤儿进程形成条件
-
原本存在父子关系;
-
父进程先死亡(父进程代码执行完毕、被杀死、异常崩溃);
-
子进程还在正常运行,没有退出。
(3)孤儿进程归宿
Linux系统不允许存在无父进程的游离进程。所有孤儿进程会被系统1号进程(init/systemd)自动收养。
收养含义:
-
1号进程变成该孤儿进程的新父进程;
-
当孤儿进程运行结束退出时,由1号进程自动调用接口回收PCB;
-
孤儿进程永远不会变成僵尸进程。
(4)孤儿进程测试代码
(5)运行时间轴 & 现象详解
-
第0秒:创建父子进程,父子正常运行;
-
极短时间后:父进程执行exit直接退出,父进程PCB被系统彻底释放;
-
0~20秒:子进程失去父进程,成为孤儿进程,被1号进程收养;
-
第20秒:子进程sleep结束、正常退出,1号进程自动回收该子进程PCB,无残留。
(6)孤儿进程特点
-
无害进程:孤儿进程不会造成内存泄漏,系统自动兜底回收;
-
状态一般为S:大部分孤儿进程后台休眠、等待事件,处于浅睡眠;
-
无需人为处理:不用手动回收,1号进程全权接管。
(7)僵尸进程 VS 孤儿进程
|
对比项 |
僵尸进程(Z) |
孤儿进程 |
|---|---|---|
|
死亡顺序 |
子先死,父不死 |
父先死,子不死 |
|
PCB状态 |
代码数据释放,PCB残留占用内存 |
正常运行,PCB完整合法 |
|
回收方式 |
父进程手动回收,否则永久残留 |
被1号进程自动收养、自动回收 |
|
危害 |
占用PID、内存泄露,危害系统 |
无任何危害,系统天然处理 |
|
能否人为杀死 |
kill -9 无效,只能处理父进程 |
正常信号可以杀死 |
子死父活为僵尸,PCB残留占内存;父死子活为孤儿,一号进程来兜底。
四、总结对照表
|
状态字符 |
状态名称 |
核心特点 |
能否被杀死 |
|---|---|---|---|
|
R |
运行态 |
占用CPU,持续运算 |
能 |
|
S |
可中断睡眠 |
等待资源,可被信号唤醒 |
能 |
|
D |
不可中断IO休眠 |
磁盘IO中,内核保护 |
不能 |
|
T |
手动暂停态 |
人为挂起,可恢复 |
能 |
|
t |
调试追踪态 |
gdb调试断点暂停 |
能 |
|
X |
死亡退出态 |
资源完全释放,转瞬即逝 |
无需操作 |
|
Z |
僵尸态 |
子进程退出,父进程未回收 |
需父进程回收 |
五、全文终极总结
本篇文章从操作系统底层原理出发,以PCB挂载在哪一类等待队列,就为什么状态为唯一核心判定法则,由浅入深讲解通用操作系统三大基础状态、Linux八大细化进程状态、特殊进程(僵尸/孤儿)、前后台进程全部知识点,全篇贯穿硬件队列、内存机制、内核逻辑,下面对全文进行系统性归纳总结,适合一次性背诵复盘。
1、底层核心本质(全篇最重要)
操作系统为不同状态的进程维护不同双向链表等待队列,进程本质就是在各个队列之间不断切换。PCB进程控制块是进程的唯一标识,无论进程如何挂起、阻塞,PCB永远常驻内存;判定进程状态不需要死记硬背,只需要看PCB挂载队列:挂载CPU队列=运行/就绪、挂载外设队列=阻塞、数据挪入Swap=挂起。
2、操作系统通用三大基础状态+挂起机制
-
运行/就绪态:PCB挂载CPU调度队列,进程资源齐全,不主动放弃CPU;正在占用CPU为运行态,排队等待CPU为就绪态。
-
阻塞态:PCB挂载键盘、磁盘、网卡等外设队列,进程主动放弃CPU,等待外部资源;分为浅睡眠S(可中断)、深度睡眠D(内核IO、不可中断)。
-
挂起态:内存不足时,将进程代码数据挪入Swap磁盘,PCB保留在原队列;分为就绪挂起(缺内存、可运行)、阻塞挂起(缺资源+缺内存)。极端内存不足触发OOM机制,杀死低优先级用户进程,内核进程永不被杀。
补充:Linux仅有两类无法被kill -9杀死的进程,分别是D态磁盘IO进程(内核数据保护)、内核级挂起进程(系统保护)。
3、Linux八种进程状态核心归纳
-
R运行态:CPU密集型程序,PCB在CPU队列;无休眠无阻塞,占用大量CPU资源。
-
S可中断浅睡眠:最常见状态,等待软件IO、休眠、网络;可被任意信号杀死。死循环打印程序看似R态,因外设速度远慢于CPU,采样绝大部分时间为S态。
-
D不可中断深度睡眠:内核态磁盘IO交互,内核屏蔽所有用户信号,kill -9无效;只能等待IO完成或重启服务器,保障磁盘数据一致性。
-
T暂停态:人为发送暂停信号冻结进程,资源保留,可手动恢复运行。
-
t追踪态:gdb调试专用,断点暂停产生,仅开发调试可见。
-
X死亡态:进程彻底释放资源,状态转瞬即逝,用户无法捕捉。
-
Z僵尸态:子先死、父存活,代码数据释放、PCB残留驻留僵尸队列;保存退出码、终止信号等退出信息,必须父进程手动回收,占用PID资源,有系统危害。
4、特殊进程:僵尸进程 & 孤儿进程
-
僵尸进程:子死父活,PCB残留内存,占用PID与内存资源,无法被kill命令杀死,只能父进程调用wait回收PCB;回收本质:读取PCB退出信息+释放PCB内存。
-
孤儿进程:父死子活,无任何危害;被1号systemd进程自动收养,退出时由系统自动回收,永远不会变为僵尸进程。
背诵口诀:子死父活为僵尸,PCB残留占内存;父死子活为孤儿,一号进程来兜底。
5、前后台进程核心区别
-
前台进程:占用当前终端,关闭终端进程直接结束,可使用Ctrl+C终止、Ctrl+Z暂停转入后台,状态带+号。
-
后台进程:脱离前台终端,不占用命令行;普通后台进程关闭终端销毁,守护进程永久常驻后台。
-
常用指令:&后台运行、bg后台唤醒、fg切回前台、jobs查看后台任务。
6、学习总结
进程状态是操作系统最基础、面试最高频的知识点,切忌死记硬背状态字符。只要牢记队列判定法则,就能通透区分所有进程状态;分清S浅睡眠与D深度睡眠、僵尸与孤儿进程是学习重中之重。同时理解CPU与外设速度差、Swap挂起机制、OOM杀进程逻辑,就能彻底吃透Linux进程底层原理,适配日常开发、运维、面试全部场景。
终极极简口诀汇总: 1、看队列,定状态;PCB不动,数据可换。 2、外设等待为阻塞,磁盘IO不可杀。 3、子僵孤父,一号兜底。 4、R耗CPU,S最常见,D杀不掉,Z要清理。
进程状态是操作系统的核心基础,也是面试、运维、开发的必考点。通用三态理解逻辑,Linux八态落地实操,搭配代码亲手复现,就能彻底吃透。
重点记住:D态杀不掉、Z态要回收、S态最常见、R态耗CPU、T/t为暂停,前后台切换熟练使用 &、fg、bg 命令,日常使用完全够用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)