Linux进程状态详解_running与sleep说明【指导】
发布时间 - 2025-12-30 00:00:00 点击率:次Linux中R状态表示进程在可运行队列中等待调度,并非正在CPU执行;S态分可中断(S)与不可中断(D),后者常因硬件故障导致;ps无法捕捉真实运行瞬间,需用pidstat、perf等工具追踪实际CPU占用。
Linux中R状态不等于“正在CPU上执行”
进程显示为R(running)只是表示它处于**可运行队列中等待被调度**,未必正在占用CPU。内核调度器决定哪个R进程真正上CPU执行,其余的就排队等。尤其在多核系统中,ps或top看到大量R进程,可能只是负载高、调度竞争激烈,而非每个都在满频运行。
常见误判场景:
- 单核机器上看到20个
R进程 → 实际只有1个在跑,其余19个在runqueue里堵着 -
top中%CPU总和远低于100%,但STAT列一堆R→ 说明进程频繁进出可运行态(如短时计算+快速阻塞),不是持续霸占CPU - 用
perf record -e sched:sched_switch能观察到R进程实际被切换上/下CPU的频率,比单纯看ps更准
S睡眠态分两种:可中断 vs 不可中断
S(sleeping)是Linux中最常见的非运行态,但背后机制差异极大:
-
S(大写)= 可中断睡眠(TASK_INTERRUPTIBLE):进程在等I/O、信号或显式调用wait_event_interruptible();收到信号会唤醒并处理,比如read()从磁盘读数据时被Ctrl+C打断 -
D(大写)= 不可中断睡眠(TASK_UNINTERRUPTIBLE):通常卡在底层驱动或硬件交互中(如等待坏块磁盘响应、NFS服务器失联),连SIG都杀不掉,只能等设备恢复或内核超时
KILL
判断方法:
$ ps aux | awk '$8 ~ /^[SD]$/ {print $0}'
若大量进程卡在D态,基本可定位为存储或外设故障,不是应用层问题。
为什么ps看不到真正的“running on CPU”进程?
ps快照采样的是进程的**内核态任务结构体(task_struct)中的state字段**,而该字段在进程真正被调度器选中并进入__switch_to上下文切换前,仍是R。换句话说:ps永远抓不到“正在执行”的瞬间,只抓到“刚被唤醒”或“刚被抢占”的状态。
要逼近真实CPU占用,得用动态追踪工具:
-
pidstat -u 1:按秒输出每个进程实际CPU使用率(基于调度统计,非状态快照) -
perf top -p $(pgrep your_proc):直接看该进程在CPU上执行时的函数热点 -
/proc/[pid]/stack:对R或S进程读取其内核栈,确认它到底在等什么(比如停在ext4_file_read_iter就是磁盘I/O,停在futex_wait_queue_me就是锁竞争)
sleep命令和进程S态没有直接关系
Shell里的sleep 5启动的进程确实会进S态,但它只是用户空间调用nanosleep()后由内核置为TASK_INTERRUPTIBLE——这和你程序里fread()卡住、accept()没连接、pthread_mutex_lock()抢不到锁导致的S本质相同,都是自愿让出CPU。
关键区别在于唤醒源:
-
sleep:靠定时器到期唤醒 - I/O类
S:靠设备中断或数据就绪唤醒 - 锁/信号量类
S:靠其他线程释放资源后显式唤醒
所以别看到S就以为是“休眠”,得结合/proc/[pid]/stack或strace -p [pid]看它最后一条系统调用是什么。
# linux
# 工具
# 栈
# ai
# switch
# 热点
# 区别
# 为什么
# 结构体
# 堆
# 线程
# 多核
# 时计
# 停在
# 卡在
# 的是
# 都是
# 信号量
# 瞬间
# 都在
# 两种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Python制作简易注册登录系统
焦点电影公司作品,电影焦点结局是什么?
html5的keygen标签为什么废弃_替代方案说明【解答】
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
EditPlus 正则表达式 实战(3)
Windows Hello人脸识别突然无法使用
Laravel如何使用Eloquent进行子查询
成都网站制作公司哪家好,四川省职工服务网是做什么用?
javascript读取文本节点方法小结
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
郑州企业网站制作公司,郑州招聘网站有哪些?
利用python获取某年中每个月的第一天和最后一天
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Laravel如何实现API速率限制?(Rate Limiting教程)
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何用PHP快速搭建高效网站?分步指南
Laravel如何配置和使用缓存?(Redis代码示例)
Linux系统命令中tree命令详解
佛山网站制作系统,佛山企业变更地址网上办理步骤?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
西安专业网站制作公司有哪些,陕西省建行官方网站?
如何在VPS电脑上快速搭建网站?
北京的网站制作公司有哪些,哪个视频网站最好?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何快速搭建虚拟主机网站?新手必看指南
如何获取免费开源的自助建站系统源码?
Linux安全能力提升路径_长期防护思维说明【指导】
html如何与html链接_实现多个HTML页面互相链接【互相】
如何在Windows服务器上快速搭建网站?
实例解析Array和String方法
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
javascript中的try catch异常捕获机制用法分析


KILL