菜鸟科技网

ubuntu ps命令

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

ubuntu ps命令-图1
(图片来源网络,侵删)

ps 命令的核心概念

在学习具体用法前,理解两个核心概念非常重要:

  1. PID (Process ID): 每个进程在系统中都有一个唯一的数字标识符,就像每个人的身份证号一样。ps 命令默认会显示 PID。
  2. TTY (Teletype): 表示进程所在的终端,如果进程是在图形界面(GUI)下启动的,或者没有关联任何终端,它会显示 ,如果是在终端(如 gnome-terminal, konsole)中启动的,它会显示终端的设备名(如 pts/0)。

最常用的 ps 命令用法

ps 命令的强大之处在于它可以通过不同的选项组合来展示不同范围和格式的进程信息,这里我们从最常用的开始,逐步深入。

查看当前终端下的进程 (最基础)

这是 ps 最原始的用法,只显示当前终端中启动的进程。

ps

输出示例:

ubuntu ps命令-图2
(图片来源网络,侵删)
  PID TTY          TIME CMD
 1234 pts/0    00:00:00 bash
 5678 pts/0    00:00:00 ps
  • PID: 进程ID
  • TTY: 所在终端
  • 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 -efps -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 命令!

分享:
扫描分享到社交APP
上一篇
下一篇