ps 是干什么的
ps 从 /proc 读取进程快照并格式化输出,用来判断进程在不在、PID 是多少、谁在吃资源。ps aux 与 ps -ef 是两套常用列风格,-o 可自定义列,--sort 能按 CPU 或内存排序。它只做观察不改状态,是所有 Linux 发行版都自带的基础工具,常与 pgrep、top 配合使用。
基本信息
| 适用平台 | Linux 全发行版(procps-ng) |
|---|---|
| 全量列表 | ps aux 或 ps -ef |
| 排序 | ps aux --sort=-%mem | head |
| 定位 PID | pgrep -a <名字>、pidof <名字> |
| 进程树 | ps -ejH 或 pstree -p |
典型使用场景
- 服务起不来时确认进程是否真的在跑、PID 是多少
- 排查资源占用:按 CPU 或内存排序找出大户再决定处置
- 核对启动参数:确认进程命令行与配置文件是否一致
- 找出谁拉起了异常进程,判断父子关系与来源
- 脚本分支:用 pgrep 判断进程存在性再执行后续逻辑
典型用法
典型用法
ps aux --sort=-%cpu | head -10 # CPU 占用前十
ps aux --sort=-%mem | head -10 # 内存占用前十
ps -ef --forest | head -30 # 看父子层级
ps -o pid,ppid,stat,lstart,cmd -p 1234 # 指定 PID 的详细字段
pgrep -a sshd # 按名字列出 PID 与命令行
ps -eLf | grep java | head # 查看线程
systemctl status nginx | head -5 # 服务型进程优先看 systemd 视角STAT 状态列怎么读
| 状态 | 含义 | 常见原因 |
|---|---|---|
| R | 运行或就绪 | 正常执行中 |
| S | 可中断睡眠 | 等待事件或 IO,最常见 |
| D | 不可中断睡眠 | 等磁盘或网络 IO,需查存储 |
| Z | 僵尸 | 父进程未回收,查父进程逻辑 |
| T | 已停止 | 被作业控制或信号暂停 |
容器里 ps 默认只看到本容器命名空间的进程;要按宿主机视角排查,用 nsenter -t <PID> -p ps 或平台自带工具。
ps 输出是瞬时快照,短命进程可能正好错过;持续观察要用 top、循环采样或专业的监控采集,别拿一次 ps 结果当结论。
常用列含义
| 列 | 含义 | 用途 |
|---|---|---|
| PID / PPID | 进程号与父进程号 | 顺藤摸瓜找出是谁拉起的 |
| %CPU / %MEM | 占用比例 | 排序定位资源大户 |
| VSZ / RSS | 虚拟内存与物理内存 | RSS 更接近真实占用 |
| STAT | 进程状态 | 配合状态表判断卡在哪一步 |
| START / TIME | 启动时间与累计 CPU 时间 | 判断运行时长与是否刚重启 |
要长期观察进程资源,用 pidstat -p <PID> 1 按秒采样,或看 /proc/<PID>/status 的 VmRSS 与 Threads 字段;ps 只给出某一瞬间的值。