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

【进程与线程】进程的状态

在操作系统中,进程是执行中的程序实例。进程在其生命周期中会经历不同的状态,操作系统根据进程的执行情况和资源调度,将进程划分为多个状态。 这些状态帮助操作系统更加高效地管理 CPU 和系统资源。

进程的状态:就绪态,运行态,阻塞态,暂停态,僵尸态,死亡态。
请添加图片描述

1. 就绪态(Ready)

进程已准备好运行,但由于 CPU 正忙,暂时无法获得 CPU 执行权。

此时进程已获得所有必要的资源(如内存、I/O 等),只需等待 CPU 调度。
多个进程可能同时处于就绪状态,操作系统会将它们放入 就绪队列 中,按照调度算法(如时间片轮转、优先级调度)分配 CPU。

转换条件
  • 创建态 转入(进程被创建后,获得所需资源)。
  • 运行态 转入(时间片用尽,重新进入就绪队列等待调度)。

2. 运行态(Running)

进程正在 CPU 上执行,属于唯一占用 CPU 的状态。

在单核 CPU 系统中,任意时刻只有一个进程处于运行态。
在多核 CPU 系统中,每个核心上可以有一个进程处于运行态。

转换条件
  • 就绪态 转入(进程被调度器分配到 CPU)。
  • 转换到其他状态:
    • 阻塞态:进程执行过程中需要等待某些资源(如 I/O 请求)。
    • 就绪态:时间片用尽,CPU 被剥夺。
    • 死亡态:进程执行完成。

3. 阻塞态(Blocked/Waiting)

进程正在等待某些资源或事件(如 I/O 设备、文件锁、信号)完成,暂时无法继续执行。

阻塞态的进程会停止占用 CPU,释放调度权,直到等待的事件完成。
典型场景:等待磁盘 I/O 完成、等待用户输入、网络数据传输。

转换条件
  • 运行态 转入(进程请求资源未满足)。
  • 转换到 就绪态:等待的资源或事件完成,进程重新进入就绪队列。

4. 暂停态(Stopped/Suspended)

进程被 人为暂停系统挂起,处于暂停执行的状态。

进程不会占用 CPU,不会继续执行,但仍保留所有资源(如内存)。通常由用户或系统发出暂停信号(如 SIGSTOP)导致。暂停态是人为控制的,与阻塞态不同,暂停态不是因为等待资源

转换条件
  • 运行态就绪态 转入(接收到暂停信号)。
  • 转换到其他状态:
    • 就绪态:接收到继续信号(如 SIGCONT)。
    • 死亡态:进程被终止。

Linux 中,使用 Ctrl+Z 将一个前台进程暂停(进入暂停态),可以通过 fgbg 恢复执行。

5. 僵尸态(Zombie)

进程已 完成执行,但其父进程尚未通过系统调用(如 wait())回收它的退出状态,导致进程仍保留在进程表中,成为僵尸进程。

僵尸态的进程已释放大部分资源(如内存),只占用进程表中的一个条目。
僵尸进程无法被直接杀死,只有父进程回收其状态或父进程退出后由 init 进程接管时,僵尸态才会消失。

转换条件
  • 运行态 转入(进程完成执行)。
  • 转换到 死亡态:父进程回收退出状态。

避免僵尸进程:① 父进程应主动调用 wait()waitpid() 获取子进程的退出状态。② 使用信号处理机制自动回收子进程(如 SIGCHLD 信号处理)。

6. 死亡态(Terminated/Exited)

进程已完成执行或被终止,所有资源被系统回收,进程完全退出。

死亡态是进程的最终状态一旦进程进入死亡态,就无法再恢复

转换条件

运行态 转入(正常执行完成);从 其他状态 转入(进程被强制终止,如接收到 SIGKILL 信号)。

综合:进程状态转换图

				   +-----------+
                   | 创建态     |
                   +-----------+
                         |
                         v
+-----------+      +-----------+      +-----------+
| 就绪态     | <--> | 运行态     | ---> | 阻塞态     |	
+-----------+      +-----------+      +-----------+
进程已准备好运行,	  进程正在 CPU 上执行		进程等待某些资源或事件完成,
						 |				暂时无法继续执行。
但等待 CPU 调度。          |                   |
                         v                   |
                  +-----------+              |
                  | 暂停态     | <------------+
                  +-----------+	进程被人为或系统挂起,暂停执行。
                         |
                         v
                  +-----------+
                  | 僵尸态     | 进程已完成执行,但父进程未回收其退出状态。
                  +-----------+
                         |
                         v
                  +-----------+
                  | 死亡态     | 进程已终止,所有资源被回收。
                  +-----------+

查看进程状态

在 Linux 系统中,可以使用 pstop 查看进程的状态:

ps -eo pid,stat,cmd

# STAT 列 表示进程状态:
#   R:运行态(Running)。
#   S:阻塞态(Sleeping)。
#   D:不可中断的阻塞态(如等待 I/O)。
#   T:暂停态(Stopped)。
#   Z:僵尸态(Zombie)。

输出

PID   STAT CMD
1234  R    ./myprogram        # 正在运行
5678  S    sleep 100          # 阻塞等待
9101  T    ./myprogram        # 暂停
1121  Z    [myprogram] <defunct>  # 僵尸进程

综上。进程的状态反映了其生命周期中的不同阶段,操作系统通过这些状态高效地管理进程和资源,理解这些状态及其转换有助于熟悉操作系统调度机制,并在实际开发中避免问题(如僵尸进程)。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!


http://www.kler.cn/a/506756.html

相关文章:

  • 网络科技有限公司网络设计
  • Windows 蓝牙驱动开发-蓝牙设备栈
  • 运行fastGPT 第四步 配置ONE API 添加模型
  • Hive集群的安装准备
  • Python 实现 NLP 的完整流程
  • 【Go】Go Gin框架初识(一)
  • AI与药学:大语言模型赋能药物推荐
  • 为什么我喜欢在 CSS 中使用 RegEx
  • npm发布组件(vue3+webpack)
  • Vue学习之旅:从生命周期到工程化开发与组件实践(生命周期+工程化开发)
  • @Query(org.springframework.data.jpa.repository.Query)
  • HTTP 到 HTTPS – 以下是操作步骤
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • 海太长江隧道:科技防水筑就跨江新通道
  • 卷积神经04-TensorFlow环境安装
  • Dexie.js 的批量操作与索引优化
  • 《深度学习神经网络训练:数据集下载资源列表》
  • 使用Eclipse将Springboot项目打jar包
  • GPU算力平台|在GPU算力平台部署轻量级中文OCR项目(chineseocr_lite)
  • 机器学习-学习算法
  • java实现word转html(支持docx及doc文件)
  • 常见的安全测试漏洞详解
  • VLANIF配置之区别(Differences in VLANIF Configuration)
  • 高德地图自定义点聚合样式
  • 数据结构-顺序表及链表结构分析
  • 【odbc】odbc连接kerberos认证的 hive和spark thriftserver