一、Linux 进程监控工具概览

Linux 中最常见的进程查看命令如下:

监控命令 含义
ps 静态查看某一时刻的进程状态,适合临时检查、筛选和脚本取值
top 动态、交互式查看系统整体状态,包括负载、进程、CPU、内存等信息
htop top 的增强版,界面更友好,也支持鼠标操作
pstree 以树状方式查看父子进程关系

二、ps 命令详解

2.1 常见用法

ps 命令常见写法如下:

ps 命令选项 命令说明
ps -ef 以全格式显示系统中的所有进程
ps auxf 显示系统中全部进程的详细信息,并按树状结构展示父子关系

常见参数说明:

  • -e:显示所有进程
  • -f:以 full format 显示更多字段
  • a:显示所有终端上的进程
  • u:以用户为中心显示格式
  • x:显示无控制终端的进程
  • f:按树状结构展示父子关系

2.2 ps -ef 每一列含义

列名 含义
UID 启动该进程的用户
PID 进程 ID
PPID 父进程 ID
C CPU 占用相关信息
STIME 进程启动时间
TTY 关联终端,如果没有终端通常显示 ?
TIME 该进程累计占用的 CPU 时间
CMD 启动进程时使用的完整命令

2.3 ps aux 每一列含义

列名 含义
USER 进程所属用户
PID 进程 ID
%CPU CPU 使用率
%MEM 内存使用率
VSZ 虚拟内存大小(KB)
RSS 实际占用物理内存大小(KB)
TTY 关联终端
STAT 进程状态
START 进程启动时间
TIME 占用 CPU 时间
COMMAND 进程命令及参数

2.4 ps 使用案例

2.4.1 过滤某个服务进程

$ ps -ef | grep crond
$ ps aux | grep crond

2.4.2 查看进程树并显示 PID

$ pstree -p

如果没有 pstree,也可以使用:

$ ps auxf

2.4.3 提取指定字段

提取 ps aux 结果中的第一列和第三列:

$ ps aux | awk '{print $1,$3}'

提取时去掉标题行:

$ ps aux | awk 'NR>1{print $1,$3}'

自定义输出 user,%cpu,stat

$ ps axo user,%cpu,stat

2.4.4 查询指定服务的详细字段

取出 crond 进程的 pid,%cpu,%mem,command

$ ps aux | grep 'crond' | awk '{print $2,$3,$4,$11}'

更稳妥的写法:

$ ps --no-heading -o pid,%cpu,%mem,command -C crond

2.4.5 取最后一列和倒数第二列

$ ps aux | grep 'crond' | awk '{print $NF}'
$ ps aux | grep 'crond' | awk '{print $(NF-1)}'

2.4.6 找出内存使用率最高的前 5 个进程

$ ps --no-heading aux | sort -rnk4 | head -5

三、top 与 htop

3.1 top 的作用

top 是一个交互式系统监控命令,可以展示:

  • 系统负载
  • 进程信息
  • CPU 使用情况
  • 内存使用情况

它的体验类似 Windows 任务管理器。

image-20231017192423968

3.2 top 常用快捷键

top 快捷键 说明
q 退出
空格 立即刷新
P 按 CPU 使用率排序
M 按内存使用率排序
Shift+> 向右滚动
Shift+< 向左滚动

3.3 htop

htop 可以看作是 top 的增强版,界面更友好,也支持鼠标操作。安装方式如下:

$ yum install -y htop

说明:htop 常见于 EPEL 源中,如果安装失败,通常需要先配置 EPEL 源。

启动 htop

$ htop

image-20231017195939827

四、top 使用案例

4.1 非交互模式查看第 2 行

$ top -bn1 | awk 'NR==2'

参数说明:

  • -b:批处理模式
  • -n1:只执行 1 次

4.2 提取第 2 行中的最后两列

$ top -bn1 | awk 'NR==2{print $(NF-1),$NF}'

这类写法常用于在脚本中快速提取平均负载值。

五、小结

日常排查进程问题时,可以这样理解几类命令的分工:

  • ps:适合精确筛选和脚本化取值。
  • top:适合实时观察系统整体运行状态。
  • htop:适合更直观的人机交互式查看。
  • pstree:适合分析父子进程关系和进程树。