【进程与线程】进程的状态
在操作系统中,进程是执行中的程序实例。进程在其生命周期中会经历不同的状态,操作系统根据进程的执行情况和资源调度,将进程划分为多个状态。 这些状态帮助操作系统更加高效地管理 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 将一个前台进程暂停(进入暂停态),可以通过 fg 或 bg 恢复执行。
5. 僵尸态(Zombie)
进程已 完成执行,但其父进程尚未通过系统调用(如 wait())回收它的退出状态,导致进程仍保留在进程表中,成为僵尸进程。
僵尸态的进程已释放大部分资源(如内存),只占用进程表中的一个条目。
僵尸进程无法被直接杀死,只有父进程回收其状态或父进程退出后由 init 进程接管时,僵尸态才会消失。
转换条件
- 从 运行态 转入(进程完成执行)。
- 转换到 死亡态:父进程回收退出状态。
避免僵尸进程:① 父进程应主动调用 wait() 或 waitpid() 获取子进程的退出状态。② 使用信号处理机制自动回收子进程(如 SIGCHLD 信号处理)。
6. 死亡态(Terminated/Exited)
进程已完成执行或被终止,所有资源被系统回收,进程完全退出。
死亡态是进程的最终状态,一旦进程进入死亡态,就无法再恢复。
转换条件
从 运行态 转入(正常执行完成);从 其他状态 转入(进程被强制终止,如接收到 SIGKILL 信号)。
综合:进程状态转换图
+-----------+| 创建态 |+-----------+|v
+-----------+ +-----------+ +-----------+
| 就绪态 | <--> | 运行态 | ---> | 阻塞态 |
+-----------+ +-----------+ +-----------+
进程已准备好运行, 进程正在 CPU 上执行 进程等待某些资源或事件完成,| 暂时无法继续执行。
但等待 CPU 调度。 | |v |+-----------+ || 暂停态 | <------------++-----------+ 进程被人为或系统挂起,暂停执行。|v+-----------+| 僵尸态 | 进程已完成执行,但父进程未回收其退出状态。+-----------+|v+-----------+| 死亡态 | 进程已终止,所有资源被回收。+-----------+
查看进程状态
在 Linux 系统中,可以使用 ps 或 top 查看进程的状态:
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> # 僵尸进程
综上。进程的状态反映了其生命周期中的不同阶段,操作系统通过这些状态高效地管理进程和资源,理解这些状态及其转换有助于熟悉操作系统调度机制,并在实际开发中避免问题(如僵尸进程)。
以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!
相关文章:
【进程与线程】进程的状态
在操作系统中,进程是执行中的程序实例。进程在其生命周期中会经历不同的状态,操作系统根据进程的执行情况和资源调度,将进程划分为多个状态。 这些状态帮助操作系统更加高效地管理 CPU 和系统资源。 进程的状态:就绪态࿰…...
阻塞赋值和非阻塞赋值
理论学习 阻塞赋值 用 表示 ,这种对应的电路结构常常与触发器没有关系,只与输入电平的变化有关系。可以将阻塞赋值的操作看作只有一个步骤的操作,即将计算赋值符号的右边赋值给左边,在未执行完之前&#…...
Maven在Win10上的安装教程
诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要,也可以从官网下载: 第一步:解压文件 第二步:设置环境变量 在系统变量处点击新建,输入变量名MAVEN_HOME,变量值为解压路径: 在系统变…...
攻防世界_SQL注入
inget 尝试万能钥匙。 输入?id1or11# supersqli 1.找注入点 输入框 2.判断字符型,数字型 输入1 and 11 和1 and 12,发现两次提交后页面一样,判断出为字符型注入 3.判断闭合符号 输入1,回显正常 输入1,报错 加上…...
Ruby语言的数据结构
Ruby语言的数据结构详解 Ruby是一种动态、面向对象的编程语言,因其简洁优雅的语法而受到开发者的喜爱。在Ruby中,数据结构是构建和管理数据的一种方式,不同的数据结构适用于不同的场景。本文将详细探讨Ruby中的几种主要数据结构,…...
Jmeter配置服务代理器 Proxy(二)
1.创建脚本记录器 2.配置:Jmeter代理、端口、记录目标等 3.配置谷歌浏览器代理 浏览器配置代理的详细教程可参考:使用whistle代理-CSDN博客 4.启动Jmeter记录器 点击ok后弹出这个界面,生成了证书: 5.给浏览器安装Jmeter代理的证书…...
Spring Boot 中实现 WebSocket 的方式
在 Spring Boot 中实现 WebSocket 的方式主要有以下几种,每种方式适用于不同的场景和需求: 1. 基于 Spring WebSocket 的实现 特点: 原生支持 WebSocket,基于 Spring 提供的 API。使用 WebSocketConfigurer 和 WebSocketHandler 配置端点和消息处理逻辑。可以通过拦截器访…...
C语言初阶习题【29】杨氏矩阵
1. 题目描述——杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N); 2. 思路 3. 代码实现1 #include<stdio.h>void fin…...
[操作系统] 深入理解操作系统的概念及定位
概念 任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)。 其核心功能如图片所示,包括: 内核 (Kernel): 内核是操作系统的核心部分,被认为是狭义上的操作系统,直接与硬件打交道。负责进程管理、内…...
Java中对list数据进行手动分页(可直接复用版)
1.获取list列表数据 // 这边用的mybatisplus查询的sql。条件自己组装 List<实体类> result baseMapper.getPageData(lambdaQuery); 2.计算总记录数 // 计算总记录数 int totalRecords result.size(); 3.创建分页对象,并塞入结果值 // 创建分页对象 IPa…...
【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页
【HarmonyOS NEXT】鸿蒙跳转华为应用市场目标APP下载页 一、问题背景: 如今,大家都离不开各种手机应用。随着鸿蒙系统用户越来越多,大家都希望能在鸿蒙设备上快速找到想用的 APP。华为应用市场里有海量的 APP,但之前从鸿蒙设备进…...
《研发管理 APQP 软件系统》——汽车电子行业的应用收益分析
全星研发管理 APQP 软件系统在汽车电子行业的应用收益分析 在汽车电子行业,技术革新迅猛,市场竞争激烈。《全星研发管理 APQP 软件系统》的应用,为企业带来了革命性的变化,诸多收益使其成为行业发展的关键驱动力。 《全星研发管理…...
【IDEA 2024】学习笔记--文件选项卡
在我们项目的开发过程中,由于项目涉及的类过多,以至于我们会打开很多的窗口。使用IDEA默认的配置,个人觉得十分不便。 目录 一、设置多个文件选项卡按照文件字母顺序排列 二、设置多个文件选项卡分行显示 一、设置多个文件选项卡按照文件字…...
Android SystemUI——服务启动流程(二)
在 Andorid 系统源码中,package/apps下放的是系统内置的一些 APP,例如 Settings、Camera、Phone、Message 等等。而在 framework/base/package 下,它们也是系统的 APP,SystemUI 就在此目录下。它控制着整个 Android 系统的界面,但其实他也是一个 APP,不同于一般的 APP,它…...
iOS - 内存对齐
1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …...
小游戏前端地区获取
目前前端获取除了太平洋,没有其它的了。 //在JS中都是使用的UTF-8,然而requst请求后显示GBK却是乱码,对传入的GBK字符串,要用数据流接收,responseType: "arraybuffer" tt.request({url: "https://whoi…...
AIGC时代:如何快速搞定Spring Boot+Vue全栈开发
文章目录 一、Spring Boot基础二、Vue.js基础三、Spring Boot与Vue.js集成四、性能优化与最佳实践《快速搞定Spring BootVue全栈开发》 内容简介作者简介目录前言/序言本书内容本书特点读者对象 随着人工智能生成内容(AIGC)技术的迅速发展,…...
MDX语言的多线程编程
MDX语言的多线程编程 引言 多线程编程是一种重要的编程技术,广泛用于提高程序的运行效率和响应速度。随着计算机硬件的发展,多核处理器的普及,多线程编程显得尤为重要。MDX(Multi-dimensional Expressions)语言作为一…...
Vue.js组件开发-实现输入框与筛选逻辑
在Vue.js组件开发中,实现输入框与筛选逻辑通常涉及创建一个输入框组件,让用户能够输入搜索关键字,并根据这些关键字过滤一个数据列表。 步骤 准备数据: 在Vue组件中,准备一个数据列表(通常是一个数组…...
配置Allure环境变量【macOS版】
1. 进入github官网,搜索allure 点击进入,下滑找到Download栏目,点击release 2. 下载安装包并解压 我下载的是zip,解压至存放目录,复制该目录。(一会配置环境变量用) 3. 编辑.zsrch文件&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
