htop 是Linux系统中一个交互式的进程查看器,可以实时显示系统资源使用情况和运行中的进程信息。与传统的top命令相比,htop提供了彩色显示、垂直和水平滚动、鼠标操作支持、更好的进程信息展示等特性,是系统管理员监控系统性能的利器。
htop [选项]
| 选项 | 说明 |
|---|---|
-d, --delay=间隔 |
设置刷新间隔(单位:十分之一秒) |
-C, --no-color |
使用单色模式 |
-h, --help |
显示帮助信息 |
-u, --user=用户名 |
只显示指定用户的进程 |
-p, --pid=PID,PID... |
只显示指定PID的进程 |
-s, --sort-key 列 |
按指定列排序(如PID, CPU%, MEM%等) |
-t, --tree |
以树状结构显示进程 |
-M, --no-mouse |
禁用鼠标支持 |
-V, --version |
显示版本信息 |
--drop-capabilities[=off] |
丢弃特权(安全模式) |
htop界面分为三个主要部分:
| 界面区域 | 说明 | 显示内容 |
|---|---|---|
| CPU使用率条 | 显示每个CPU核心的使用情况 | 不同颜色表示用户进程(绿色)、系统进程(红色)、低优先级进程(蓝色)、虚拟化进程(青色)、等待IO进程(黄色) |
| 内存使用率条 | 显示内存和交换空间使用情况 | 绿色表示已用内存,蓝色表示缓冲区,黄色表示缓存 |
| 进程列表列 | 显示每个进程的详细信息 | PID, USER, PRI, NI, VIRT, RES, SHR, S, CPU%, MEM%, TIME+, Command |
| 状态栏 | 显示系统运行时间和负载 | Uptime, Load average |
| 功能键提示 | 显示可用的快捷键 | F1=Help, F2=Setup, F3=Search, F4=Filter, F5=Tree, F6=SortBy, F7=Nice-, F8=Nice+, F9=Kill, F10=Quit |
# Ubuntu/Debian 系统
sudo apt-get update
sudo apt-get install htop
# RHEL/CentOS/Fedora 系统
sudo yum install epel-release # 先安装EPEL仓库
sudo yum install htop
# 或者使用dnf(Fedora/RHEL8+)
sudo dnf install htop
# Arch Linux
sudo pacman -S htop
# 从源码编译安装
wget https://github.com/htop-dev/htop/archive/refs/tags/3.0.5.tar.gz
tar -xzf 3.0.5.tar.gz
cd htop-3.0.5
./autogen.sh
./configure
make
sudo make install
启动htop查看系统进程:
# 启动htop(默认设置)
htop
# 以单色模式启动(无颜色)
htop -C
# 设置刷新间隔为2秒
htop -d 20 # 20表示2秒(十分之一秒为单位)
# 以树状结构显示进程
htop -t
# 示例输出(终端中的实际界面):
# 1 [||| 12.3%] Tasks: 121, 212 thr; 2 running
# 2 [| 3.4%] Load average: 0.05, 0.10, 0.15
# Mem[||||||||||||||||| 785M/3.85G] Uptime: 5 days, 03:12:45
# Swp[ 0K/0K]
#
# PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
# 1 root 20 0 168M 6.8M 4.8M S 0.0 0.2 0:01.25 systemd
# 456 alice 20 0 410M 148M 32M S 5.6 3.8 12:45.23 gnome-shell
# 789 bob 20 0 210M 48M 18M R 12.3 1.2 3:21.45 chrome
# ...
只显示指定用户的进程:
# 只显示root用户的进程
htop -u root
# 只显示alice用户的进程
htop -u alice
# 也可以启动后按u键选择用户
# 在htop界面中:按u → 选择用户 → 回车
只显示指定PID的进程:
# 只显示PID为123和456的进程
htop -p 123,456
# 显示某个进程及其子进程
htop -p $(pgrep -P 1 nginx) # 显示nginx主进程的所有子进程
# 结合其他命令查找进程
htop -p $(pidof sshd)
按特定字段排序进程列表:
# 按CPU使用率降序排序(默认)
htop -s PERCENT_CPU
# 按内存使用率降序排序
htop -s PERCENT_MEM
# 按进程ID排序
htop -s PID
# 按运行时间排序
htop -s TIME
# 常用排序键:
# PERCENT_CPU - CPU使用率
# PERCENT_MEM - 内存使用率
# PID - 进程ID
# TIME - 运行时间
# USER - 用户名
# PRIORITY - 优先级
# NICE - nice值
# M_SIZE - 内存大小
# STARTTIME - 启动时间
虽然htop是交互式工具,但也可以在脚本中结合使用:
#!/bin/bash
# 脚本1:监控特定进程
PROCESS_NAME="nginx"
echo "监控进程: $PROCESS_NAME"
# 使用htop查看特定进程
while true; do
clear
echo "=== $(date) ==="
echo ""
# 获取进程PID
PIDS=$(pidof $PROCESS_NAME)
if [ -n "$PIDS" ]; then
# 使用htop查看这些进程
htop -p $PIDS -d 5 -C 2>/dev/null || echo "htop未安装或出错"
else
echo "进程 $PROCESS_NAME 未运行"
fi
sleep 5
done
# 脚本2:生成进程快照
echo "生成进程快照..."
htop -C --no-mouse 2>/dev/null | head -50 > /tmp/process_snapshot_$(date +%Y%m%d_%H%M%S).txt
echo "快照已保存到 /tmp/"
# 脚本3:检查系统负载
echo "检查系统负载..."
echo "当前负载: $(uptime | awk -F'load average:' '{print $2}')"
echo "正在运行htop进行详细查看..."
sleep 2
htop -d 30 -s PERCENT_CPU # 刷新间隔3秒,按CPU排序
| 快捷键 | 功能 | 说明 |
|---|---|---|
| F1 或 h | 显示帮助 | 显示所有快捷键的帮助信息 |
| F2 或 S | 设置 | 进入设置界面,可以配置显示选项、颜色主题等 |
| F3 或 / | 搜索进程 | 按名称搜索进程,按F3继续搜索下一个 |
| F4 或 \ | 过滤进程 | 按条件过滤进程,只显示匹配的进程 |
| F5 或 t | 树状视图 | 以树状结构显示进程层次关系 |
| F6 或 < > | 选择排序字段 | 选择按哪一列排序,<和>调整排序顺序 |
| F7 或 ] | 降低优先级 | 降低选中进程的nice值(增加优先级) |
| F8 或 [ | 提高优先级 | 提高选中进程的nice值(降低优先级) |
| F9 或 k | 结束进程 | 向选中进程发送信号(默认SIGTERM) |
| F10 或 q | 退出 | 退出htop |
| Space | 标记进程 | 标记/取消标记进程,用于批量操作 |
| u | 显示指定用户 | 只显示特定用户的进程 |
| P | 按CPU排序 | 按CPU使用率排序 |
| M | 按内存排序 | 按内存使用率排序 |
| T | 按时间排序 | 按运行时间排序 |
| I | 反转排序 | 反转当前排序顺序 |
| Ctrl+F | 跟踪进程 | 显示进程打开的文件和网络连接 |
| l | 显示进程打开的文件 | 使用lsof显示进程打开的文件 |
| s | 跟踪系统调用 | 使用strace跟踪进程的系统调用 |
| H | 显示/隐藏用户进程 | 切换显示用户进程或所有进程 |
| K | 显示/隐藏内核线程 | 切换显示内核线程 |
| Ctrl+L | 刷新 | 刷新屏幕 |
| + 或 - | 展开/折叠树 | 在树状视图中展开或折叠进程树 |
| 状态字符 | 状态 | 说明 |
|---|---|---|
R |
运行中 (Running) | 进程正在运行或在运行队列中 |
S |
睡眠中 (Sleeping) | 进程在等待事件完成(可中断睡眠) |
D |
磁盘睡眠 (Disk Sleep) | 进程在等待I/O操作(不可中断睡眠) |
Z |
僵尸进程 (Zombie) | 进程已终止但父进程尚未读取其退出状态 |
T |
已停止 (Stopped) | 进程被信号停止(如Ctrl+Z) |
t |
跟踪/调试停止 (Tracing stop) | 进程被调试器停止 |
X |
死亡 (Dead) | 进程已死亡(不会出现在htop中) |
I |
空闲 (Idle) | 内核线程的空闲状态 |
| 字段 | 说明 | 单位 |
|---|---|---|
| VIRT | 虚拟内存大小:进程占用的虚拟内存总量 | KB, MB, GB |
| RES | 常驻内存大小:进程实际使用的物理内存(不包括交换分区) | KB, MB, GB |
| SHR | 共享内存大小:进程使用的共享内存大小 | KB, MB, GB |
| MEM% | 内存使用百分比:进程使用的物理内存占总物理内存的百分比 | 百分比 |
htop的配置文件位于~/.config/htop/htoprc,可以自定义设置:
# 查看htop配置文件
cat ~/.config/htop/htoprc
# 编辑配置文件
nano ~/.config/htop/htoprc
# 示例配置文件内容:
# 显示选项
fields=0 48 17 18 38 39 40 2 46 47 49 1
sort_key=46
sort_direction=1
hide_threads=0
hide_kernel_threads=1
hide_userland_threads=0
shadow_other_users=0
show_thread_names=0
show_program_path=1
highlight_base_name=0
highlight_megabytes=1
highlight_threads=1
tree_view=0
header_margin=1
detailed_cpu_time=0
cpu_count_from_one=0
show_cpu_usage=1
show_cpu_frequency=0
update_process_names=0
account_guest_in_cpu_meter=0
color_scheme=0
delay=15
left_meters=AllCPUs Memory Swap
left_meter_modes=1 1 1
right_meters=Tasks LoadAverage Uptime
right_meter_modes=2 2 2
# 在htop中可进行的进程操作:
# 1. 结束进程:选择进程 → 按F9 → 选择信号 → 回车
# 常用信号:
# 15 (SIGTERM) - 优雅终止(默认)
# 9 (SIGKILL) - 强制终止
# 1 (SIGHUP) - 重新加载配置
# 2 (SIGINT) - 中断(Ctrl+C)
# 3 (SIGQUIT) - 退出并生成core文件
# 2. 调整进程优先级:
# 提高优先级(更友好多任务):选择进程 → 按F7
# 降低优先级(更多CPU时间):选择进程 → 按F8
# 3. 标记多个进程进行批量操作:
# 选择进程 → 按Space标记 → 对所有标记进程执行操作
# 4. 跟踪进程:
# 选择进程 → 按s键跟踪系统调用
# 选择进程 → 按l键显示打开的文件
# 选择进程 → 按Ctrl+F跟踪文件和网络连接
# 在htop中按F2进入设置界面:
# 1. Meters设置:添加/移除顶部显示的信息栏
# - Left column: 左侧信息栏
# - Right column: 右侧信息栏
# 可用选项:CPU, Memory, Swap, Tasks, Load, Uptime等
# 2. Display options:显示选项
# - Hide kernel threads: 隐藏内核线程
# - Hide userland process threads: 隐藏用户进程线程
# - Tree view: 树状视图
# - Shadow other users' processes: 其他用户进程显示为灰色
# 3. Colors:颜色主题选择
# - Default: 默认
# - Monochrome: 单色
# - Black on white: 黑底白字
# - Light terminal: 浅色终端
# - Custom: 自定义
# 监控CPU使用率高的进程:
htop -s PERCENT_CPU
# 监控内存使用率高的进程:
htop -s PERCENT_MEM
# 以树状结构查看进程关系(便于查看父进程和子进程):
htop -t
# 监控特定服务的所有进程:
htop -u nginx # 查看nginx用户的所有进程
# 或
htop -p $(pidof nginx)
# 快速查找进程:
# 在htop中按F3,输入进程名
# 过滤显示特定进程:
# 在htop中按F4,输入过滤条件(如"chrome"显示所有Chrome进程)
| 特性 | htop | top |
|---|---|---|
| 用户界面 | 彩色界面,直观美观 | 单色界面,较为简陋 |
| 鼠标支持 | 支持鼠标点击和滚动 | 不支持鼠标操作 |
| 进程操作 | 可视化操作,菜单驱动 | 命令行参数操作 |
| 树状视图 | 支持树状显示进程层次 | 不支持树状视图 |
| 垂直滚动 | 支持垂直和水平滚动 | 仅支持有限的进程显示 |
| CPU使用显示 | 图形化显示每个核心使用情况 | 简单的百分比显示 |
| 内存显示 | 图形化显示内存和交换空间 | 简单的数字显示 |
| 配置 | 可视化配置界面 | 需要编辑配置文件或命令行参数 |
| 学习曲线 | 较低,直观易用 | 较高,需要记忆命令 |
| 系统资源占用 | 相对较高 | 非常低 |
| 普遍性 | 可能需要单独安装 | 几乎所有Linux系统默认安装 |
#!/bin/bash
# 脚本1:系统监控面板
echo "=== 系统监控面板 ==="
echo "选择监控选项:"
echo "1. 监控CPU使用率高的进程"
echo "2. 监控内存使用率高的进程"
echo "3. 监控特定用户的进程"
echo "4. 树状查看所有进程"
echo "5. 退出"
echo ""
read -p "请输入选项 (1-5): " choice
case $choice in
1)
echo "启动htop,按CPU排序..."
htop -s PERCENT_CPU -d 10
;;
2)
echo "启动htop,按内存排序..."
htop -s PERCENT_MEM -d 10
;;
3)
read -p "请输入用户名: " username
if id "$username" &>/dev/null; then
echo "监控用户 $username 的进程..."
htop -u "$username" -d 10
else
echo "用户 $username 不存在"
fi
;;
4)
echo "树状查看所有进程..."
htop -t -d 10
;;
5)
echo "退出"
exit 0
;;
*)
echo "无效选项"
exit 1
;;
esac
# 脚本2:定期生成系统快照
echo ""
echo "开始定期生成系统快照..."
SNAPSHOT_DIR="/tmp/htop_snapshots"
mkdir -p "$SNAPSHOT_DIR"
for i in {1..5}; do
echo "生成快照 $i/5..."
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
htop -C --no-mouse 2>/dev/null | head -100 > "$SNAPSHOT_DIR/snapshot_${TIMESTAMP}.txt"
# 提取关键信息
echo "=== 系统状态 ===" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
echo "时间: $(date)" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
echo "" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
# 获取前5个CPU使用率高的进程
echo "CPU使用率前5的进程:" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
htop -C --no-mouse 2>/dev/null | grep -E "^ *[0-9]+ " | head -5 >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
echo "" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
# 获取前5个内存使用率高的进程
echo "内存使用率前5的进程:" >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
htop -C -s PERCENT_MEM --no-mouse 2>/dev/null | grep -E "^ *[0-9]+ " | head -5 >> "$SNAPSHOT_DIR/summary_${TIMESTAMP}.txt"
echo "快照 $i 已保存"
if [ $i -lt 5 ]; then
sleep 10 # 等待10秒
fi
done
echo "所有快照已保存到 $SNAPSHOT_DIR"
# 脚本3:进程监控和告警
echo ""
echo "进程监控告警系统"
# 监控的进程列表
MONITOR_PROCESSES=("nginx" "mysql" "redis-server")
for PROC in "${MONITOR_PROCESSES[@]}"; do
echo "检查进程: $PROC"
# 检查进程是否运行
if ! pgrep -x "$PROC" >/dev/null; then
echo "警告: $PROC 未运行!"
# 这里可以添加发送告警的逻辑
else
# 检查进程资源使用
PID=$(pgrep -x "$PROC" | head -1)
if [ -n "$PID" ]; then
CPU_USAGE=$(ps -p "$PID" -o %cpu --no-headers)
MEM_USAGE=$(ps -p "$PID" -o %mem --no-headers)
echo " PID: $PID, CPU: ${CPU_USAGE}%, MEM: ${MEM_USAGE}%"
# 如果CPU使用率超过阈值,告警
if (( $(echo "$CPU_USAGE > 80.0" | bc -l) )); then
echo " ⚠️ CPU使用率过高: ${CPU_USAGE}%"
fi
# 如果内存使用率超过阈值,告警
if (( $(echo "$MEM_USAGE > 50.0" | bc -l) )); then
echo " ⚠️ 内存使用率过高: ${MEM_USAGE}%"
fi
fi
fi
echo ""
done
echo "监控完成,启动htop查看详细信息..."
sleep 2
htop -d 15
~/.config/htop/htoprc可能因版本不同而格式有差异# 1. htop命令不存在
# 检查是否安装
which htop
# 安装(参考前面的安装部分)
# 2. 显示乱码或颜色异常
# 检查终端类型
echo $TERM
# 设置正确的终端类型
export TERM=xterm-256color
# 检查ncurses库
ldd $(which htop) | grep curses
# 使用单色模式
htop -C
# 3. 鼠标支持异常
# 禁用鼠标支持
htop -M
# 4. 刷新太慢或太快
# 调整刷新间隔
htop -d 30 # 3秒刷新一次
# 5. 无法显示所有进程
# 检查权限(某些进程需要root权限查看)
sudo htop
# 或者以root身份运行
sudo -i
htop
# 6. 功能键无效
# 检查终端模拟器设置,确保功能键发送正确
# 尝试使用替代键(如q代替F10退出)
# 7. 树状视图显示异常
# 确保使用最新版本
htop --version
# 更新到最新版本
# 8. 配置文件问题
# 删除配置文件重新生成
rm ~/.config/htop/htoprc
htop # 重新启动生成新配置
# 9. 内存显示不准确
# 检查系统内存信息
free -h
cat /proc/meminfo
# 10. 进程统计不准确
# 检查进程数量
ps aux | wc -l
# 与htop显示的Tasks数量比较