一、操作系统通用进程三大基础状态

无论 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资源,长时间无响应,内存不足。

状态逻辑:进程本身还在等待外部事件,同时被挪到磁盘。即便等待的事件完成,也需要先调入内存,再转为就绪态。

实例:正在加载网络图片的程序,网络卡顿+内存爆满,系统将其转移至磁盘,属于阻塞挂起。

重点问题:挂起后内存还是不够,会杀死进程吗?

这是面试高频追问,我直白给出底层逻辑:

  1. 普通内存紧张:优先挂起闲置进程,不会杀死任何进程;

  2. 极端内存溢出(OOM):挂起所有可挂起进程后,内存仍然不足,Linux系统会触发OOM Killer机制

  3. 杀死规则:系统不会乱杀,优先杀掉占用内存大、优先级低、长时间闲置的进程,保留系统核心进程、高优先级业务进程;

  4. 特殊说明:内核态关键进程永远不会被杀死,防止系统崩溃宕机。

为方便直观区分,两类挂起对比:

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种真实运行状态,我们日常使用 pstop 命令看到的状态标识全部包含在内。下面逐个讲解,每种状态附带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. 步骤1:用户态发起IO请求 应用程序(用户态)需要读取硬盘中的文件,调用系统调用函数,向Linux内核发起磁盘读写请求。

  2. 步骤2:切换至内核态 CPU从用户态切换为内核态,由内核接管本次磁盘IO操作,开始操作硬件磁盘。

  3. 步骤3:进程主动放弃CPU 磁盘硬件读写速度远慢于CPU,CPU不需要空等磁盘,内核会将当前进程主动剥离CPU调度队列

  4. 步骤4:挂载磁盘IO队列、标记D态 内核将该进程的PCB挂载到磁盘硬件IO等待队列,同时给PCB打上不可中断标记,进程正式进入D态深度睡眠

  5. 步骤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)

状态说明

进程被手动暂停,挂起停止运行,资源保留,可恢复执行。一般由手动发送暂停信号触发。

复现步骤

  1. 运行前文S态测试程序:./test_S

  2. 新开终端查询PID,执行暂停命令:kill -19 PID

  3. 查看状态变为T,进程暂停

  4. 恢复命令: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)


现象

运行时间轴&现象详解

  1. 0~5秒:父进程、子进程均执行sleep,全部处于S可中断睡眠态

  2. 第5秒:子进程执行exit退出,进程代码、运行数据全部释放,但是PCB进程控制块保留在内存中,挂载至僵尸进程队列,转变为Z僵尸态

  3. 5~30秒:父进程仍在休眠,没有调用wait/waitpid回收子进程PCB,僵尸进程会一直存在;

  4. 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回收僵尸进程本质:
  1. 第一步:读取信息:父进程从子进程残留的PCB中,读取保存好的退出码、终止信号等退出信息;

  2. 第二步:摘除队列:将该PCB从僵尸等待队列中摘除;

  3. 第三步:彻底释放:将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)运行时间轴 & 现象详解
  1. 第0秒:创建父子进程,父子正常运行;

  2. 极短时间后:父进程执行exit直接退出,父进程PCB被系统彻底释放;

  3. 0~20秒:子进程失去父进程,成为孤儿进程,被1号进程收养;

  4. 第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为暂停,前后台切换熟练使用 &、fgbg 命令,日常使用完全够用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐