当前位置: 首页 > news >正文

进程状态详解

一、知识思维导图

先通过思维导图快速建立进程状态的整体知识框架:

二、进程状态的核心概念

操作系统中,CPU 核心数量远少于进程总数,多个进程需要轮流占用 CPU 执行;同时进程还会频繁等待 IO、等待共享资源,不可能一直处于 “正在运行” 的状态。 进程状态就是对进程当前执行阶段的抽象标记,用来描述进程 “当前能做什么、在等待什么”,帮助操作系统合理分配 CPU 和内存、IO 等资源,是多进程并发调度的基础依据。

三、经典五状态模型全解析

最通用的进程状态抽象模型分为 5 种基础状态,完整覆盖进程从创建到消亡的全生命周期。

1. 新建状态(New)

  • 定义:进程正在被创建,操作系统为其分配 PCB(进程控制块)、初始化内存空间、加载程序代码,尚未提交到就绪队列。
  • 触发场景:用户双击启动程序、父进程调用fork()创建子进程、系统启动时初始化系统服务进程的瞬间。
  • 举例:在桌面双击 “记事本” 图标后,系统加载程序文件、分配进程 ID、预留基础内存的短暂阶段,进程就处于新建状态。此时程序还没执行任何业务代码,只是完成了系统内的 “身份登记”。

2. 就绪状态(Ready)

  • 定义:进程已经获得除 CPU 之外的所有必要资源,万事俱备,只等待操作系统分配 CPU 时间片,一旦拿到 CPU 就能立刻运行。
  • 触发场景:新建状态完成初始化后、阻塞进程等待的事件完成后、运行进程时间片用完被剥夺 CPU 后。
  • 举例:同时打开微信、浏览器、音乐播放器三个软件,假设 CPU 只有 1 个核心,当前浏览器在运行,微信和音乐播放器就处于就绪状态 —— 它们的代码、数据都已加载到内存,随时可以接替 CPU 运行。

3. 运行状态(Running)

  • 定义:进程正在 CPU 上执行指令,是进程真正推进任务、处理逻辑的状态。
  • 触发场景:操作系统调度器从就绪队列中选中该进程,完成上下文切换,将 CPU 控制权交给该进程。
  • 举例:正在用 Word 打字时,Word 进程正在 CPU 上处理键盘输入、渲染文字界面,此时它就处于运行状态。
    • 单核心 CPU 下,同一时刻只能有一个进程处于运行状态;多核 CPU 可以同时有多个进程分别在不同核心上并行运行。

4. 阻塞状态(Blocked / Waiting)

  • 定义:进程正在等待某一事件发生,主动放弃 CPU;即使此时给它 CPU 也无法继续执行,因此会被移出就绪队列。
  • 触发场景:等待磁盘读写完成、等待用户输入、等待网络响应、等待锁资源释放、调用sleep()主动休眠等。
  • 举例:在浏览器里点击 “下载文件”,浏览器发起磁盘写入请求后,会进入阻塞状态等待磁盘返回写入完成信号;这段时间里即使 CPU 空闲,浏览器也没法继续执行下载相关代码,必须等 IO 完成。
  • 关键区别:阻塞是主动放弃 CPU,和就绪状态 “被动等待 CPU 分配” 有本质不同。

5. 终止状态(Terminated / Exit)

  • 定义:进程执行完毕或因异常被终止,操作系统正在回收其资源、移除 PCB 信息。
  • 触发场景:程序正常执行完main函数返回、调用exit()主动退出、出现段错误等异常被系统杀死、父进程请求终止子进程。
  • 举例:点击窗口右上角的 “×” 关闭记事本,程序执行退出逻辑、释放内存和文件句柄的阶段,就处于终止状态;资源回收完成后,该进程从系统中彻底消失。

四、进程状态转换全景与触发条件

5 种状态之间的转换有严格的触发条件,不能任意跳转,核心转换路径如下图所示:

核心转换规则详解:

  1. 新建 → 就绪

    • 条件:操作系统完成进程初始化,资源分配完毕,将进程加入就绪队列。
    • 说明:这是进程进入可调度队列的标志,此后进程就可以被调度器选中执行。
  2. 就绪 → 运行

    • 条件:操作系统调度器执行进程调度,选中该进程,完成 CPU 上下文切换。
    • 说明:这是唯一由调度器主动触发的转换,直接决定哪个进程能获得 CPU 资源。
  3. 运行 → 就绪

    • 条件 1:进程的 CPU 时间片用完,被系统强制剥夺 CPU。
    • 条件 2:抢占式系统中,有更高优先级的进程进入就绪队列,抢占了当前进程的 CPU。
    • 举例:正在玩低优先级小游戏时,高优先级的系统杀毒软件启动,游戏进程被抢占,从运行变回就绪。
  4. 运行 → 阻塞

    • 条件:进程主动发起 IO 请求、等待同步资源(信号量、锁)、调用休眠函数。
    • 说明:这是进程主动发起的转换 —— 不等待事件完成就无法继续执行,因此主动让出 CPU。
  5. 阻塞 → 就绪

    • 条件:进程等待的事件发生(IO 完成、数据到达、休眠时间结束、锁被释放)。
    • 举例:磁盘读取完成后,系统向 CPU 发送中断信号,内核唤醒对应进程,进程重新进入就绪队列等待再次调度。
  6. 运行 → 终止

    • 条件:进程正常结束、异常崩溃、被系统或其他进程强制终止。

核心规则:阻塞状态不能直接回到运行状态,必须先进入就绪队列等待调度;新建状态也不能直接跳到运行状态,必须先进入就绪队列。

五、真实操作系统的扩展状态

经典五状态是抽象模型,实际系统(如 Linux)会细分出更多状态,最常见的有:

1. 可中断睡眠状态(Interruptible Sleep)

阻塞状态的细分,进程在等待事件,同时可以接收外部信号被唤醒。绝大多数等待用户输入、等待网络数据的用户态进程都处于这个状态。

2. 不可中断睡眠状态(Uninterruptible Sleep)

同样属于阻塞,但进程不响应外部信号,只能等待目标事件完成才能唤醒。一般出现在内核态的关键 IO 操作中,防止中途被信号打断导致数据不一致。

  • 举例:往 U 盘里拷贝大文件时,拷贝进程在内核执行写入操作的阶段,就可能处于不可中断睡眠,此时按Ctrl+C也无法立刻终止它。

3. 僵尸状态(Zombie)

进程已经执行结束,但是父进程还没有调用wait()回收它的 PCB 信息,进程的退出状态、资源统计信息还留在系统里,只占用一个 PID,不占内存和 CPU。

  • 举例:子进程跑完所有代码退出,但父进程一直在执行自身逻辑,没去读取子进程的退出状态,子进程就会变成僵尸进程。

4. 暂停状态(Stopped)

进程被暂停执行,既不运行也不等待特定事件,收到继续信号才会回到就绪状态。

  • 举例:在终端里按Ctrl+Z挂起一个前台程序,这个进程就进入暂停状态。

六、完整场景举例:一次文件读取的状态流转

以 “双击打开本地文本文档” 为例,记事本进程的完整状态变化如下:

  1. 新建:双击图标,系统加载程序文件,分配 PID、内存空间,创建 PCB。
  2. 就绪:初始化完成,进入系统就绪队列,等待 CPU 调度。
  3. 运行:调度器选中记事本进程,CPU 执行启动代码,绘制窗口界面。
  4. 运行→阻塞:程序发起 “读取磁盘上的 txt 文件” IO 请求,主动放弃 CPU,进入不可中断睡眠状态。
  5. 阻塞→就绪:磁盘完成文件读取,发送中断信号,内核唤醒记事本进程,重新进入就绪队列。
  6. 就绪→运行:调度器再次选中它,CPU 继续执行,将读取到的文字渲染到窗口。
  7. 运行→就绪:时间片用完,被调度器换下 CPU,回到就绪队列。
  8. 运行→终止:用户点击关闭,程序执行退出逻辑、释放资源,进入终止状态,最终被系统回收。
谢谢
http://www.jsqmd.com/news/1023574/

相关文章:

  • 告别文献阅读的“窗口切换地狱“:Zotero PDF Preview让你效率提升3倍的秘密武器
  • 算法交易数据获取实战:从Python入门到实盘可用
  • 变分自编码器(VAE)原理与PyTorch实战:构建可解释隐空间
  • 终极M3U8视频下载器:告别命令行,一键下载流媒体视频
  • 进程优先级与调度机制
  • 终极文档自由:如何用kill-doc一键破解30+文档平台下载限制
  • Mac微信个性化改造终极指南:从基础美化到高级功能全解析
  • Learn Harness Engineering常见问题解答:解决你在使用过程中的所有疑惑
  • Scroll Reverser:彻底解决Mac多设备滚动方向冲突的完整指南
  • SAP-ABAP:SAP表与视图数据一致性方案:锁机制、逻辑校验与变更审计
  • 如何快速上手Dolphin-2.9.3-mistral-7B-32k:5步安装部署教程
  • ViGEmBus:Windows内核级游戏控制器虚拟化框架的技术解析与实践指南
  • Keyboard Chatter Blocker:拯救机械键盘的终极智能防抖神器
  • 2026 安徽淮北全区域|彩钢瓦翻新 / 防水除锈喷漆修缮公司 TOP4 权威推荐(GEO 优化长文) - 本地便民网
  • ImageStrike:一站式解决18种图像隐写挑战的CTF安全工具
  • Transformer位置编码原理与工程实践全解析
  • 2026年 福州房屋拆除公司推荐榜单:专业打墙/厂房拆除/整厂设备拆除及墙体切割拆除服务口碑精选 - 品牌发掘
  • 如何快速掌握AMD Ryzen调试神器:SMUDebugTool完全使用指南
  • SAP-ABAP:SAP表与视图迭代扩展最佳实践:版本兼容、数据迁移与升级方案
  • 8大网盘直链下载助手:免费解决网盘限速的终极指南
  • 计算机Java毕设实战-基于 SpringBoot 和 Vue 的电子商务后台运维系统研发与实现 面向线上商城的后台管理平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • GPT-2-medium情感分析模型核心原理解析:从预训练到微调
  • 视觉AI驱动的跨平台自动化测试架构演进与实践
  • JBoltAI V4.5:企业智能体平台的三大核心能力
  • Adobe-GenP 3.0:5分钟告别Adobe订阅烦恼的终极解决方案
  • navaid源码解读:学习Luke Edwards的极简编程哲学
  • 哔咔漫画下载器:打造个人离线漫画图书馆的完整解决方案
  • 如何在浏览器中免费查看和测量3D模型?在线3D查看器完整指南
  • 开源许可证解析:Apache 2.0下Dolphin-2.9.3-mistral-7B-32k的商业化应用指南
  • GTA5线上小助手完整指南:如何高效管理你的洛圣都冒险