菜鸟科技网

ps命令如何查看当前进程详情?

ps 的全称是 Process Status(进程状态),它的主要作用是实时查看当前系统中正在运行的进程,你可以把它想象成系统的一个“快照”,告诉你在某一时刻,系统里有哪些进程在运行,它们的状态、资源占用情况等。

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

基本用法(最常用)

ps 命令有很多选项,最常用的是不带任何选项的 ps

ps

在不同 Unix 系统上(如 macOS 和 Linux),不带选项的 ps 输出格式略有不同。

在 macOS/BSD 系统上

输出通常是:

  PID TTY           TIME CMD
12345 ttys000    0:00.01 -zsh
67890 ttys001    0:00.02 bash
  • PID: 进程 ID (Process ID),每个进程的唯一标识符。
  • TTY: 终端类型,表示进程在哪个终端上运行。 表示没有关联终端(通常是后台服务)。
  • TIME: 进程自启动以来占用的 CPU 总时间。
  • CMD: 启动进程的命令名称。

在 Linux 系统上

输出通常是:

ps命令如何查看当前进程详情?-图2
(图片来源网络,侵删)
  PID TTY      TIME     CMD
12345 pts/0    00:00:01 zsh
67890 pts/1    00:00:00 bash

格式类似,但 TTY 的命名方式不同。

小结:不带选项的 ps 只能看到与你当前终端相关的、少数几个进程,对于系统管理来说,这远远不够。


常用选项和组合

ps 的真正威力在于它的选项,最常用、最强大的组合是 aux

ps aux (Linux/BSD 通用)

这是查看所有进程最经典、最常用的命令。

ps命令如何查看当前进程详情?-图3
(图片来源网络,侵删)
ps aux
  • a: 显示所有终端的进程,包括其他用户的进程。
  • u: 以用户为中心的格式显示,显示用户名、CPU 及内存使用率等。
  • x: 显示通常没有控制终端的进程(即守护进程/daemon,如 sshd, httpd)。

输出示例 (Linux):

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0  12800  8164 ?        Ss   05:30   0:01 /usr/lib/systemd/systemd --switch-root --system
root           2  0.0  0.0      0     0 ?        S    05:30   0:00 [kthreadd]
root          10  0.0  0.0      0     0 ?        S<   05:30   0:00 [rcu_gp]
root          11  0.0  0.0      0     0 ?        S<   05:30   0:00 [rcu_par_gp]
...
myuser      1234  0.5  2.1 456789 123456 ?        Sl   10:15   0:30 /usr/lib/firefox/firefox
nobody      5678  0.1  0.5  89012  34567 ?        S    10:20   0:05 /usr/sbin/nginx -g daemon on;
...

重要列解释:

  • USER: 进程所有者。
  • PID: 进程 ID。
  • %CPU: 进程占用 CPU 的时间百分比。
  • %MEM: 进程占用物理内存的百分比。
  • VSZ: Virtual Memory Size (虚拟内存大小),进程占用的虚拟内存总量。
  • RSS: Resident Set Size (常驻内存集大小),进程占用的物理内存总量。
  • TTY: 终端。
  • STAT: 进程状态。
    • R: Running (正在运行)
    • S: Sleeping (可中断睡眠,等待某个事件)
    • D: Uninterruptible Sleep (不可中断睡眠,通常在 I/O 操作)
    • Z: Zombie (僵尸进程,已结束但父进程未回收)
    • T: Stopped (已停止)
    • s: 是一个会话领导者
    • l: 多线程
    • 前台进程组
  • START: 进程启动的时间。
  • TIME: 进程累计使用的 CPU 时间。
  • COMMAND: 启动进程的完整命令。

ps -ef (Unix/Linux 通用)

这是另一个查看所有进程的经典组合,尤其在 Solaris、AIX 等传统 Unix 系统上非常普遍。

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

输出示例 (Linux):

UID        PID  PPID  C STIME TTY          TIME CMD
root          1     0  0 05:30 ?        00:00:01 /usr/lib/systemd/systemd --switch-root --system
root          2     0  0 05:30 ?        00:00:00 [kthreadd]
...
myuser     1234     1  0 10:15 pts/0    00:00:30 /usr/lib/firefox/firefox
nobody     5678     1  0 10:20 ?        00:00:05 nginx: master process nginx -g daemon on;
...

重要列解释:

  • UID: 用户 ID。
  • PID: 进程 ID。
  • PPID: Parent PID (父进程 ID),这是 ps -efps aux 一个关键区别,可以方便地追踪进程的父子关系。
  • C: CPU 使用率。
  • STIME: 进程启动的时间。
  • CMD: 启动进程的命令。

进阶用法

只显示特定进程

通常我们不想看所有进程,而是想找某个特定的进程,这时可以使用 grep

# 查找名为 'sshd' 的所有进程
ps aux | grep sshd
# 查找包含 'java' 关键字的进程
ps aux | grep java

技巧: grep 进程本身也会出现在结果中,可以用下面的命令来过滤掉 grep 自身:

ps aux | grep [s]shd
# 或者
ps aux | grep sshd | grep -v grep

使用 ps 查看进程树

ps 本身不直接显示树状结构,但可以通过组合 psgrep 来模拟。

# 显示以 PID 1 (systemd) 为根的进程树
ps -ef --forest | grep '^[^ ]* *1 '
# 或者使用更通用的方法,显示某个进程及其子进程
ps -ef --forest | grep 'sshd'

--forest 选项会让输出以树状结构显示, 符号表示父子关系。

使用 ps 查找占用资源最多的进程

ps aux 的输出非常适合用 sort 命令进行排序。

# 按内存占用率降序排列,显示前10个进程
ps aux --sort=-%mem | head -n 11
# 按CPU占用率降序排列,显示前10个进程
ps aux --sort=-%cpu | head -n 11

--sort=-%mem 表示按 %MEM 列进行降序排序。head -n 11 是因为 ps aux 的第一行是标题行,所以需要显示 11 行才能看到 10 个进程。


现代替代品:tophtop

虽然 ps 非常重要,但在实际运维中,人们更常使用 tophtop

  • top: 一个动态的、全屏的进程监视器,它会每隔几秒刷新一次,让你实时看到进程状态的变化。
  • htop: top 的一个增强版,界面更美观,操作更直观(可以用鼠标选择进程,按 F9 直接杀死进程),并且默认以树状结构显示进程。

htop 通常需要额外安装,但一旦使用,很多人就离不开它了。


命令 功能 优点 缺点
ps 查看当前终端的进程 快速,无需选项 信息有限
ps aux 查看所有进程(Linux风格) 信息全面,格式友好 输出多,需要管道处理
ps -ef 查看所有进程(Unix风格) 标准通用,有PPID列 格式略显紧凑
top 实时动态监视所有进程 实时,交互式(可排序、杀死进程) 界面相对简单
htop 实时动态监视所有进程 界面美观,交互性强,默认树状结构 需要额外安装

核心建议:

  1. ps auxps -ef,它们是查看静态进程列表的基石。
  2. 学会用 grep 过滤,这是 ps 最常见的用法。
  3. 了解 tophtop,当你需要持续监控时,它们是更好的选择。
分享:
扫描分享到社交APP
上一篇
下一篇