ps 命令是 Process Status 的缩写,它是 Linux/Unix 系统中最基本、也是最重要的命令之一,它的主要作用是查看当前系统中运行的进程。

ps 命令的核心概念
在学习具体用法前,理解两个核心概念非常重要:
- PID (Process ID): 每个进程在系统中都有一个唯一的数字标识符,就像每个人的身份证号一样。
ps命令默认会显示 PID。 - TTY (Teletype): 表示进程所在的终端,如果进程是在图形界面(GUI)下启动的,或者没有关联任何终端,它会显示 ,如果是在终端(如
gnome-terminal,konsole)中启动的,它会显示终端的设备名(如pts/0)。
最常用的 ps 命令用法
ps 命令的强大之处在于它可以通过不同的选项组合来展示不同范围和格式的进程信息,这里我们从最常用的开始,逐步深入。
查看当前终端下的进程 (最基础)
这是 ps 最原始的用法,只显示当前终端中启动的进程。
ps
输出示例:

PID TTY TIME CMD
1234 pts/0 00:00:00 bash
5678 pts/0 00:00:00 ps
PID: 进程IDTTY: 所在终端TIME: 进程累计使用的 CPU 时间CMD: 启动进程的命令名
适用场景:当你只想快速看看当前终端里运行了哪些命令时,这个命令很有用。
查看所有用户的进程 (ps aux)
这是最常用、最经典的用法之一,可以查看系统中所有用户启动的所有进程。
ps aux
输出示例 (部分):
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19356 5880 ? Ss 05:30 0:03 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 05:30 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 05:30 0:00 [rcu_gp]
...
ubuntu 1234 0.1 0.5 123456 7890 ? Sl 10:15 0:10 /usr/lib/firefox/firefox
ubuntu 5678 0.0 0.0 8765 4321 pts/0 Ss+ 10:20 0:01 -bash
各列含义详解:
USER: 进程所有者。PID: 进程ID。%CPU: 进程占用的 CPU 百分比。%MEM: 进程占用的内存百分比。VSZ: Virtual Memory Size (虚拟内存大小),单位是 KB。RSS: Resident Set Size (常驻内存集大小),表示进程实际占用的物理内存大小,单位是 KB。TTY: 所在终端。STAT: 进程状态,常见状态有:R: Running (正在运行)S: Sleeping (可中断睡眠,等待某个事件)D: Uninterruptible Sleep (不可中断睡眠,通常在等待 I/O)Z: Zombie (僵尸进程,已结束但父进程未回收)T: Stopped (已停止)s: 是一个会话组长l: 是多线程进程- 是前台进程组
START: 进程启动时间。TIME: 进程累计使用的 CPU 时间。COMMAND: 启动进程的完整命令。
查看进程的层级关系 (ps -ef 或 ps -f -e)
这个用法和 ps aux 类似,也是查看所有进程,但它的输出格式更适合查看进程的父子关系。
ps -ef
输出示例 (部分):
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 05:30 ? 00:03:01 /sbin/init splash
root 2 0 0 05:30 ? 00:00:00 [kthreadd]
...
root 1234 1 0 05:31 ? 00:00:01 /usr/sbin/cron
ubuntu 5678 1234 0 10:15 ? 00:00:10 /usr/lib/firefox/firefox
关键列:
UID: 用户ID (和USER类似)。PID: 进程ID。PPID: Parent PID (父进程ID),通过PPID可以清晰地看到进程的父子关系,上面的firefox进程的父进程 ID 是1234(cron)。
进程信息的“宽屏”模式 (ps -eLf)
当进程命令很长时,COMMAND 列可能会被截断。ps -eLf 可以提供更详细的、格式更宽的输出,方便查看完整的命令行参数。
ps -eLf
新增的关键列:
LWP: Light-Weight Process ID (轻量级进程ID,也就是线程ID),如果一个进程是多线程的,这里会显示所有线程的ID。NLWP: Number of LWPs (该进程包含的线程总数)。
实用技巧与高级用法
结合 grep 过滤进程
这是日常工作中最频繁的操作,比如查找名为 nginx 的所有进程:
# 查找包含 "nginx" 字符串的进程 ps aux | grep nginx # 查找包含 "nginx" 但排除 grep 进程本身 ps aux | grep nginx | grep -v grep
使用 --sort 对结果排序
默认情况下,ps 的输出是按 PID 排序的,我们可以按 CPU 或内存使用率排序,找出资源消耗大户。
# 按 CPU 使用率降序排列 (从高到低) ps aux --sort=-%cpu # 按 内存使用率降序排列 ps aux --sort=-%mem # 先按内存排,再按 CPU 排 ps aux --sort=-%mem,-%cpu
自定义输出列 (-o 选项)
ps 最强大的功能之一是自定义输出列,你可以只显示自己关心的信息。
# 只显示 PID, 用户, CPU, 内存和命令 ps aux -o pid,user,%cpu,%mem,cmd # 使用更友好的列名 ps aux -o pid,user:10,pcpu,pmem,comm:15
使用 pgrep 快速查找 PID
如果你只是想快速找到一个进程的 PID,而不需要看所有信息,pgrep 是更简洁的选择。
# 查找 firefox 进程的 PID pgrep firefox # 查找所有 firefox 进程的 PID (包括子进程) pgrep -fl firefox # 查找指定用户的进程 pgrep -u ubuntu firefox
使用 pstree 查看进程树
pstree 命令以树状图的形式展示所有进程的父子关系,非常直观。
pstree # 或者带 PID 显示 pstree -p
总结与对比
| 命令 | 全称 | 主要用途 | 特点 |
|---|---|---|---|
ps |
Process Status | 查看当前终端的进程 | 信息最简,仅当前终端 |
ps aux |
Process Status All Users eXtra | 查看所有用户的所有进程 | 最常用,信息全面,格式固定 |
ps -ef |
Process Status Everything Full | 查看所有进程的完整信息 | 适合查看进程的父子关系 |
pgrep |
Process Grep | 快速查找进程的 PID | 输出简洁,直接得到 PID |
pstree |
Process Tree | 以树状图查看进程关系 | 直观展示进程层级 |
现代替代品:htop
虽然 ps 非常基础和强大,但对于交互式操作(如实时查看、排序、杀死进程),htop 是一个更现代、更友好的工具。
htop 安装:
sudo apt update sudo apt install htop
htop 启动:
htop
htop 的优势:
- 彩色显示,不同类型的进程用不同颜色区分。
- 实时更新,默认每秒刷新一次。
- 交互式操作,可以用方向键选择进程,按
F9杀死进程,按F5查看进程树。 - 内存信息更直观,清晰地展示了
used,buffers,cache等。
- 对于脚本编写和快速命令行检查,
ps aux是不二之选。 - 对于交互式、实时的系统监控,
htop是更好的选择。
希望这份详细的指南能帮助你熟练掌握 Ubuntu 中的 ps 命令!
