菜鸟科技网

ps命令如何查看进程详细信息?

psProcess Status(进程状态)的缩写,它用于报告当前系统中正在运行的进程的快照信息,与 tophtop 这种实时监控工具不同,ps 通常显示的是在它执行那一刻的进程状态。

ps命令如何查看进程详细信息?-图1
(图片来源网络,侵删)

ps 命令的基本用法

ps 命令的强大之处在于其灵活的选项,我们可以通过不同的选项组合来获取不同格式的信息,最常见的用法分为三类:Unix 风格BSD 风格GNU 长选项风格

a) 最常用的 Unix 风格选项(推荐)

这是最常用、最标准的用法,通常以 开头。

ps aux 这是查看所有进程的经典组合,几乎在所有 Unix/Linux 系统上都可用。

  • a: 显示所有进程,而不仅仅是当前终端(TTY)下的进程。
  • u: 以用户为中心的格式显示,显示用户名、CPU 和内存占用等。
  • x: 显示没有控制终端(TTY)的进程,例如守护进程(daemons)。

示例输出:

ps命令如何查看进程详细信息?-图2
(图片来源网络,侵删)
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0  19356  1544 ?        Ss   May30   0:01 /sbin/init
root           2  0.0  0.0      0     0 ?        S<   May30   0:00 [kthreadd]
...
root         1234  0.1  0.5  123456 54321 ?        Sl   10:30   0:10 /usr/sbin/nginx -g daemon on;
myuser      5678  0.5  1.2  876543 234567 pts/0  Ss+  11:00   0:55 /usr/bin/python3 my_script.py

各列含义:

  • USER: 进程所有者的用户名。
  • PID: 进程 ID (Process ID)。
  • %CPU: 进程使用的 CPU 百分比。
  • %MEM: 进程使用的物理内存百分比。
  • VSZ: 虚拟内存大小 (Virtual Size)。
  • RSS: 驻留集大小 (Resident Set Size),即进程占用的物理内存。
  • TTY: 进程运行的终端。 表示没有终端。
  • STAT: 进程状态。
    • S: 睡眠状态 (Sleeping)
    • R: 运行或就绪状态 (Running/Runnable)
    • D: 不可中断的睡眠状态 (Uninterruptible Sleep)
    • Z: 僵尸进程 (Zombie)
    • s: 是会话领导者 (session leader)
    • l: 多线程进程
    • 前台进程组
  • START: 进程启动时间。
  • TIME: 进程累计使用的 CPU 时间。
  • COMMAND: 启动进程的命令。

ps -ef 这是另一种查看所有进程的常用组合,尤其在 System V 风格的系统上。

  • -e: 显示所有进程。
  • -f: 以完整的格式(full format)显示。

示例输出:

UID        PID  PPID  C STIME TTY          TIME CMD
root          1     0  0 May30 ?        00:00:01 /sbin/init
root          2     0  0 May30 ?        00:00:00 [kthreadd]
...
root       1234     1  0 10:30 ?        00:00:10 /usr/sbin/nginx -g daemon on;
myuser     5678  1234  0 11:00 pts/0    00:00:55 /usr/bin/python3 my_script.py

各列含义:

ps命令如何查看进程详细信息?-图3
(图片来源网络,侵删)
  • UID: 用户 ID。
  • PID: 进程 ID。
  • PPID: 父进程 ID (Parent PID)。
  • C: CPU 使用率(在较新的系统中可能不准确)。
  • STIME: 启动时间。
  • TTY: 终端。
  • TIME: 累计 CPU 时间。
  • CMD: 启动命令。

b) BSD 风格选项

BSD 风格的选项通常不带 ,并且更简洁。

ps aux 实际上是 Unix 风格 (ps -aux) 和 BSD 风格 (ps aux) 的混合,在 Linux 中,ps aux 会自动识别并采用 BSD 风格的输出格式。

ps auxwwps aux 的基础上,ww 选项会强制 ps 显示完整的命令行,即使它非常长。


c) GNU 长选项风格

这是最清晰、最易读的风格,选项以 开头,通常与 xargs 结合使用。

ps --forest 以树状结构显示进程,非常直观地展示了父子进程关系。

示例输出:

  PID  PPID  COMMAND
   1     0  /sbin/init
 123     1  └─ /usr/sbin/nginx
 456   123      └─ /usr/sbin/nginx
 567     1  └─ /usr/bin/python3 my_script.py

ps -eo pid,ppid,user,cmd --forest 自定义输出列,并以树状结构显示。


常用选项总结表

选项 (Unix) 选项 (BSD) 描述
-a 显示所有进程,包括其他用户的进程
-u -u 以用户为中心的格式显示
-x 显示没有控制终端的进程
-e 显示所有进程 (与 -a 类似)
-f -f 完整格式 (full format)
-l -l 长格式 (long format)
-o 自定义输出列 (e.g., pid,user,cmd)
--forest 以树状结构显示进程
-H 显示进程层次结构 (树状)
-C 按命令名筛选 (e.g., -C nginx)
-p -p 按进程 ID (PID) 筛选 (e.g., -p 1234)
-g -g 按组 ID (GID) 筛选
-u -u 按用户名或 UID 筛选
--sort 对输出进行排序 (e.g., --sort=-%cpu)

实用示例

示例 1:查找特定进程

查找名为 nginx 的所有进程。

# 方法1: grep (最常用)
ps aux | grep nginx
# 方法2: -C 选项 (更精确)
ps -C nginx

示例 2:查找特定用户的进程

查找用户 myuser 运行的所有进程。

ps -u myuser
# 或者
ps aux | grep myuser

示例 3:查找特定 PID 的进程

查看 PID 为 1234 的进程详细信息。

ps -f -p 1234

示例 4:自定义输出列

只显示 PID、用户、CPU 占用和命令。

ps -o pid,user,%cpu,cmd

示例 5:按 CPU 或内存占用排序

按 CPU 占用从高到低排序:

ps aux --sort=-%cpu

按内存占用从高到低排序:

ps aux --sort=-%mem

注意: --sort 是 GNU ps 的特性,在 macOS 或其他 BSD 系统上可能不适用。

示例 6:查看进程树

ps -ef --forest
# 或者
ps aux --forest

示例 7:查找僵尸进程

僵尸进程的状态是 Z,它们已经执行完毕但父进程尚未回收。

ps aux | grep Z

ps vs. top vs. htop

命令 描述 特点
ps 快照 显示执行命令那一刻的进程状态,输出简洁,适合脚本和一次性查询。
top 实时监控 动态、持续地更新进程列表,默认按 CPU 占用排序,交互式界面(按 q 退出)。
htop 增强型实时监控 top 的现代化替代品,彩色显示,支持鼠标操作,垂直和水平分割视图,更直观易用。
  • 当你需要快速查看某个时间点的进程情况时,使用 ps
  • 当你需要持续监控系统资源使用情况和进程活动时,使用 tophtop
  • 在日常交互式使用中,htop 通常是更好的选择,在编写脚本时,ps 是标准工具。
分享:
扫描分享到社交APP
上一篇
下一篇