使用ps查看所有处于D状态(不可中断睡眠)的进程
命令
ps aux | awk '$8 ~ /D/ {print $0}'
示例输出
systemd+ 523 0.0 0.0 25584 13196 ? Ds Jun17 0:07 /lib/systemd/systemd-resolved
root 2934884 0.0 0.1 559296 21308 ? Dsl Jun18 0:25 /usr/sbin/NetworkManager --no-daemon
root 2997274 0.0 0.0 0 0 ? D Jun19 0:00 [kworker/3:0+ipv6_addrconf]
root 2997694 0.0 0.0 0 0 ? D< Jun19 0:02 [kworker/u17:0+brcmf_wq/mmc2:0001:1]
root 2999190 0.0 0.0 0 0 ? D Jun19 0:00 [kworker/u16:2+events_power_efficient]
root 2999255 0.0 0.0 24660 7792 ? Ds Jun20 0:00 /usr/sbin/cups-browsed
systemd+ 2999278 0.0 0.0 25188 11788 ? Ds Jun20 0:00 /lib/systemd/systemd-resolved
systemd+ 2999291 0.0 0.0 25188 11884 ? Ds Jun20 0:00 /lib/systemd/systemd-resolved
systemd+ 3000876 0.0 0.0 25188 11508 ? Ds Jun20 0:00 /lib/systemd/systemd-resolved
root 3002059 0.0 0.0 24660 8204 ? Ds Jun21 0:00 /usr/sbin/cups-browsed
root 3005436 0.0 0.0 167552 4932 ? Ds Jun21 0:00 (fstrim)
root 3005473 0.0 0.0 24660 7932 ? Ds 00:06 0:00 /usr/sbin/cups-browsed
root 3006664 0.1 0.0 0 0 ? D 08:26 0:37 [kworker/4:2+events]
解读
一、 命令语法解读:ps aux | awk '$8 ~ /D/ {print $0}'
这个命令的作用是:找出当前系统中所有处于 D 状态(不可中断的睡眠状态)的进程,并将它们的详细信息打印出来。
具体拆解如下:
ps aux:用于收集当前系统所有运行中进程的详细快照。a:显示所有关联了终端的进程(包括其他用户的进程)。u:以“面向用户”的详细格式输出(即包含 USER、%CPU、%MEM 等列)。-
x:显示没有控制终端的后台进程(守护进程)。 |(管道符):将左边ps aux的输出结果,直接作为传递给右边命令的输入数据。awk '$8 ~ /D/ {print $0}':使用awk这个强大的文本处理工具进行逐行过滤。$8:代表每一行的第 8 列数据。在ps aux的输出中,第 8 列刚好是 STAT(进程状态)列。~:正则表达式匹配符号,意思是“包含”或“符合”。/D/:匹配大写字母D。在进程状态里,D代表不可中断睡眠(通常是在等待磁盘读写或网络 I/O)。{print $0}:当满足前面的条件时执行的动作。$0代表打印完整的当前行内容。(补充说明:在awk中,{print $0}是匹配成功的默认动作,所以这个命令其实可以简写为awk '$8 ~ /D/')。
二、 每一列的含义
systemd+ 523 0.0 0.0 25584 13196 ? Ds Jun17 0:07 /lib/systemd/systemd-resolved
- USER (
systemd+):进程的所有者(运行该进程的系统用户)。末尾的+号表示完整的用户名超出了列的默认宽度,被截断了。 - PID (
523):进程的唯一 ID 编号。如果你想强行结束进程(比如用kill命令),用的就是这个数字。 - %CPU (
0.0):该进程自启动以来占用的 CPU 时间百分比。 - %MEM (
0.0):该进程占用的物理内存百分比。 - VSZ (
25584):虚拟内存大小 (Virtual Memory Size),单位为 KB。表示进程总共申请了多少虚拟内存(包括分配了但还没实际使用的部分)。 - RSS (
13196):常驻内存集 (Resident Set Size),单位为 KB。这是进程实际驻留在物理内存中的大小。 - TTY (
?):该进程运行所在的终端。显示为?代表它是后台运行的守护进程,不依赖任何终端。 - STAT (
Ds):进程当前的状态(也就是你命令中$8筛选的重点)。字母组合表示不同的附加状态: D:不可中断的睡眠状态 (Uninterruptible sleep)。通常意味着进程正在死等 I/O 操作完成,此时它连kill -9信号都不响应。s:会话首进程 (Session leader),通常意味着它下面还有子进程。l:多线程进程 (Multi-threaded)。-
<:高优先级进程。 - START (
Jun17):进程启动的日期或时间。 - TIME (
0:07):进程实际占用 CPU 计算的累计总时间(格式为 分:秒),而不是它存活了多久。 - COMMAND (
/lib/systemd/...):启动该进程时执行的具体命令路径和参数。如果是被中括号[]包围的(如结果中的[kworker/3:0...]),代表这是操作系统的内核线程,通常用于处理底层硬件或系统级任务。
留下评论