凡亿教育-小至
凡事用心,一起进步
打开APP
公司名片
凡亿课堂 | 面试指南
当前位置: 首页 面试指南
嵌入式Linux面试:进程进入D状态是什么意思?为什么kill -9有时也杀不掉?
浏览量:131
2026-10-21 17:05:21

Linux排查卡顿时,ps里常见R、S、D、T、Z等状态。D状态通常表示不可中断睡眠,进程正在等待某类内核资源或I/O完成。它和普通S状态的差别,是面试里很常见的系统排查问题。

先给结论

关键点:D状态任务当前处于内核的不可中断等待中。SIGKILL并不是“立刻从任何上下文强行终止”,信号通常要等任务重新回到可处理信号的时机才能生效。

Unix进程状态及状态迁移关系图,可用于理解运行、睡眠、停止与僵尸等状态

为什么要这样设计

先确认在等什么

查看/proc/<pid>/stack、wchan、内核日志和阻塞调用,判断是块设备、网络文件系统、驱动I/O还是锁/资源等待。

区分S与D

S是可中断睡眠,信号可以唤醒;D通常用于不希望中途破坏关键I/O状态的等待路径。

大量D状态要看系统层

如果大量进程同时进入D状态,优先关注磁盘超时、NFS、存储驱动、总线异常或底层设备不可达,而不是逐个kill进程。

面试时可以这样回答

看到D状态我不会先反复kill -9,而会查它当前阻塞在内核哪条路径。可以结合wchan、/proc/pid/stack、dmesg和I/O统计判断是否在等待块设备、文件系统或驱动。如果底层I/O迟迟不返回,SIGKILL也需要等任务离开不可中断睡眠后才有机会处理。若很多任务同时D住,我会把它当成系统级I/O问题处理,而不是单个应用程序问题。

继续追问

  • D状态一定代表磁盘故障吗?

  • Z僵尸进程和D状态的处理思路有什么完全不同?

  • 驱动里把等待设计成不可中断睡眠有什么风险?

常见误区

  • 把D状态解释成“进程死掉了”。

  • 看到kill -9无效就直接判断Linux内核崩溃。

  • 只看ps状态,不追踪内核栈和实际I/O等待对象。


声明:本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。仅供学习交流使用,不构成商业目的。版权归原作者所有,如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时删除。 侵权投诉

相关文章

FPGA时钟分频与PLL/MMCM怎么用?FPGA面试从时钟资源讲到动态分频

2026-09-03 13:55:21

技术岗位面试如何与HR谈薪

2023-09-09 16:38:54

嵌入式Linux面试:Semaphore到底解决什么?P/V操作、等待队列和“能不能睡眠”怎么讲

2026-10-20 21:54:53

电源工程师面试:数字电源环路怎么调?采样延迟、PWM更新和补偿器是重点

2026-10-16 20:11:53

HDI盲埋孔与微孔设计有哪些要点?PCB工程师面试从微孔类型讲到叠层与DFM

2026-08-29 12:17:44