ps 命令详解ps(Process Status)是 Linux 中最常用的进程查看命令,用于查看当前系统中的进程信息。它不会像 top 一样持续刷新,而是一次性输出当前时刻的进程快照。
ps [options]
Linux 中 ps 参数有两种风格:
-)-)例如:
ps -ef
和
ps aux
虽然都查看所有进程,但参数风格不同。
ps
示例:
PID TTY TIME CMD
3456 pts/0 00:00:00 bash
3678 pts/0 00:00:00 ps
说明:
| 列 | 说明 |
|---|---|
| PID | 进程ID |
| TTY | 终端 |
| TIME | CPU累计时间 |
| CMD | 命令 |
适用于:
ps -ef
输出:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jan01 ? 00:00:05 systemd
root 520 1 0 Jan01 ? 00:00:01 sshd
user 3254 3001 0 14:30 pts/0 00:00:00 vim
字段说明:
| 字段 | 说明 |
|---|---|
| UID | 用户 |
| PID | 进程ID |
| PPID | 父进程ID |
| C | CPU占用 |
| STIME | 启动时间 |
| TTY | 终端 |
| TIME | CPU时间 |
| CMD | 启动命令 |
应用场景:
ps aux
输出:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 ...
常见字段:
| 字段 | 说明 |
|---|---|
| USER | 所属用户 |
| PID | 进程号 |
| %CPU | CPU使用率 |
| %MEM | 内存使用率 |
| VSZ | 虚拟内存(KB) |
| RSS | 实际物理内存(KB) |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | CPU累计时间 |
| COMMAND | 完整命令 |
这是 Linux 运维最常用的命令。
显示所有进程
ps -e
等价:
ps -A
Full Format
完整格式输出。
ps -ef
会显示:
等更多信息。
指定用户
例如:
ps -u root
查看 root 用户进程。
查看当前用户:
ps -u $(whoami)
查看指定 PID
例如:
ps -p 1234
多个:
ps -p 1,2,3
按程序名查找
例如:
ps -C nginx
输出:
PID TTY TIME CMD
2301 ? 00:00 nginx
比 grep 更方便。
查看指定终端
例如:
ps -t pts/0
显示没有控制终端的进程。
例如:
ps -x
通常后台服务没有TTY。
显示当前终端所有用户进程。
ps -a
自定义输出格式。
例如:
ps -eo pid,user,%cpu,%mem,cmd
输出:
PID USER %CPU %MEM CMD
1 root 0.0 0.2 systemd
常用格式:
ps -eo pid,ppid,user,%cpu,%mem,start,time,cmd
非常适合运维脚本。
显示所有终端进程
ps a
用户格式
ps u
显示:
包括后台进程
ps x
所以:
ps aux
实际上等于:
a
u
x
组合。
STAT 是分析进程运行状态的重要字段。
| 状态 | 说明 |
|---|---|
| R | 运行中(Running) |
| S | 睡眠(Sleeping) |
| D | 不可中断睡眠(通常等待IO) |
| T | 暂停(Stopped) |
| Z | 僵尸进程(Zombie) |
| X | 已死亡(Dead) |
扩展标志:
| 标志 | 说明 |
|---|---|
| < | 高优先级 |
| N | 低优先级 |
| s | Session Leader |
| l | 多线程 |
| + | 前台进程 |
例如:
Ss
表示:
ps -ef | grep java
输出:
root 2345 1 java -jar app.jar
更好的方式:
pgrep -af java
ps -ef | grep nginx
或者:
ps -C nginx
ps -ef
观察:
PID PPID
3000 1
3012 3000
说明:
3000
├──3012
PPID 即父进程 ID。
ps -u tom
ps aux --sort=-%cpu
前十个:
ps aux --sort=-%cpu | head
输出示例:
USER PID %CPU %MEM COMMAND
root 1234 89.2 10 java
ps aux --sort=-%mem | head
ps -eLf
输出:
UID PID PPID LWP NLWP CMD
字段说明:
| 字段 | 说明 |
|---|---|
| LWP | 线程ID |
| NLWP | 线程数 |
ps -ejH
或者更直观地使用:
pstree
示例:
systemd
├─sshd
│ └─bash
│ └─vim
ps -efww
或
ps auxww
ww 不截断长命令。
ps -eo pid,user,%cpu,%mem,start,time,args
示例:
PID USER %CPU %MEM STARTED TIME COMMAND
非常适合生成监控报表。
查看 MySQL:
ps -ef | grep mysql
避免把 grep 自己匹配出来:
ps -ef | grep '[m]ysql'
或者:
pgrep mysql
找到 PID:
ps -ef | grep nginx
结束:
kill PID
强制结束:
kill -9 PID
例如:
kill -9 12345
# 查看所有进程
ps -ef
# 查看所有进程(BSD 风格)
ps aux
# 查看指定 PID
ps -p 1001
# 查看 Java
ps -ef | grep java
# 查看 CPU 排序
ps aux --sort=-%cpu
# 查看内存排序
ps aux --sort=-%mem
# 查看线程
ps -eLf
# 查看父子关系
ps -ejH
# 查看完整命令
ps -efww
# 自定义列
ps -eo pid,user,%cpu,%mem,cmd
# 查看 root 用户
ps -u root
# 查看 nginx
ps -C nginx
# 查看后台进程
ps -x
| 问题 | 答案 |
|---|---|
ps与top的区别? |
ps输出一次当前进程快照;top持续刷新并动态显示进程状态。 |
ps -ef与ps aux有什么区别? |
两者都能查看所有进程,但分别采用 UNIX 风格(-ef)和 BSD 风格(aux)参数,输出字段略有不同。 |
| 如何查看 CPU 占用最高的进程? | `ps aux --sort=-%cpu |
| 如何查看内存占用最高的进程? | `ps aux --sort=-%mem |
| 如何查看某个进程的线程? | ps -eLf,或结合grep过滤指定进程。 |
| 如何查看进程树? | ps -ejH,或使用pstree查看更直观的树形结构。 |
| 如何查看完整启动命令? | 使用ps -efww或ps auxww,避免长命令被截断。 |
ps 的常用命令可以归纳为以下几类:
| 用途 | 推荐命令 |
|---|---|
| 查看所有进程 | ps -ef或ps aux |
| 按名称查找进程 | ps -C nginx、`ps -ef |
| 查看指定 PID | ps -p <PID> |
| 查看指定用户进程 | ps -u <USER> |
| 按 CPU 排序 | ps aux --sort=-%cpu |
| 按内存排序 | ps aux --sort=-%mem |
| 查看线程 | ps -eLf |
| 查看进程树 | ps -ejH或pstree |
| 自定义输出 | ps -eo pid,user,%cpu,%mem,start,time,cmd |
| 显示完整命令 | ps -efww或ps auxww |
熟练掌握 ps 与 grep、pgrep、kill、top、pstree 等命令配合使用,是 Linux 日常运维、故障排查和性能分析的基础技能。




