news 2026/6/16 13:32:49

进程状态详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程状态详解

一、知识思维导图

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

二、进程状态的核心概念

操作系统中,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. 运行→终止:用户点击关闭,程序执行退出逻辑、释放资源,进入终止状态,最终被系统回收。
谢谢
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 13:24:59

RDP Wrapper终极重构:解锁Windows远程桌面多用户能力的革命性突破

RDP Wrapper终极重构:解锁Windows远程桌面多用户能力的革命性突破 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 你是否曾因Windows家庭版无法使用远程桌面而束手无策?是否渴望在专业版上实…

作者头像 李华
网站建设 2026/6/16 13:24:07

计算机Java毕设实战-基于 Web 的钱币收藏文化交流传播系统设计 钱币收藏爱好者资源交流管理系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/6/16 13:22:40

Move WSL技术深度解析:WSL分发版存储架构迁移与性能优化实战

Move WSL技术深度解析:WSL分发版存储架构迁移与性能优化实战 【免费下载链接】move-wsl Easily move your WSL distros VHDX file to a new location. 项目地址: https://gitcode.com/gh_mirrors/mo/move-wsl 在Windows Subsystem for Linux(WSL&…

作者头像 李华
网站建设 2026/6/16 13:22:14

变分自编码器(VAE)原理与PyTorch实战:构建可解释隐空间

1. 项目概述:为什么一个“带概率的自编码器”值得你花两小时认真读完我第一次在实验室跑通VAE的时候,盯着屏幕上那批模糊但确实在“动”的手写数字生成图,愣了足足三分钟。不是因为效果惊艳——说实话,和后来的GAN比,它…

作者头像 李华
网站建设 2026/6/16 13:19:54

Visual Pinball渲染技术终极指南:DirectX、OpenGL与bgfx三大后端对比

Visual Pinball渲染技术终极指南:DirectX、OpenGL与bgfx三大后端对比 【免费下载链接】vpinball Visual Pinball 项目地址: https://gitcode.com/gh_mirrors/vp/vpinball Visual Pinball作为最受欢迎的开源弹珠台模拟器,其渲染技术经历了多年的演…

作者头像 李华
网站建设 2026/6/16 13:19:52

视觉AI驱动的跨平台自动化测试架构演进与实践

视觉AI驱动的跨平台自动化测试架构演进与实践 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 引言:传统自动化测试的架构性挑战 在数字化转型加速的…

作者头像 李华