Linux 进程状态
核心定义 Linux 进程状态表示进程当前处于运行、睡眠、等待 IO、停止或僵尸等阶段。理解进程状态有助于排查 CPU 高、负载高、进程卡死和僵尸进程问题。
1. 常见进程状态
| 状态码 | 名称 | 含义 |
|---|---|---|
R | Running | 正在运行或在运行队列等待 CPU |
S | Sleeping | 可中断睡眠,等待事件完成 |
D | Uninterruptible Sleep | 不可中断睡眠,通常等待磁盘或内核 IO |
T | Stopped | 进程被暂停或跟踪 |
Z | Zombie | 僵尸进程,子进程退出但父进程未回收 |
I | Idle | 内核空闲线程 |
2. 查看进程状态
ps -eo pid,ppid,stat,comm,args | head
ps aux
top
查看指定进程:
ps -o pid,ppid,stat,comm,args -p <pid>
cat /proc/<pid>/status
3. D 状态排查
D 状态通常表示进程等待不可中断 IO,常见原因:
- 磁盘 IO 卡住。
- NFS 或远程存储无响应。
- 块设备故障。
- 内核态等待无法被信号中断。
排查命令:
iostat -x 1
pidstat -d 1
dmesg -T | tail -100
4. Z 僵尸进程排查
僵尸进程本身不占 CPU 和内存主体,但会占用 PID。大量僵尸进程通常说明父进程没有正确回收子进程。
ps -eo pid,ppid,stat,comm | awk '$3 ~ /Z/ {print}'
处理思路:
- 找到僵尸进程的父进程。
- 优先重启或修复父进程。
- 父进程退出后,僵尸进程通常会被 init/systemd 接管并回收。
5. 面试回答模板
标准回答 Linux 常见进程状态包括 R、S、D、T、Z。R 表示运行或等待 CPU,S 表示可中断睡眠,D 表示不可中断睡眠,通常和磁盘或内核 IO 等待有关,Z 表示僵尸进程。排查时可以用
ps、top、/proc/<pid>/status查看状态;D 状态重点查 IO、存储和内核日志,Z 状态重点找父进程是否未回收子进程。
关联文档
- Linux CPU 100% 排查:结合进程状态排查 CPU 异常。
- 服务器 IO 过高排查流程:分析 D 状态与 IO 等待问题。
- Linux 基础:理解进程、服务和系统管理基础。
