Linux top 与 htop 进程监控技巧

2次阅读

top默认只显示进程名而非完整路径,易混淆多python进程;加-c参数或运行中按c键可显示完整命令,但exec或prctl重命名后仍可能不全,需ps -f -p pid补充确认。

Linux top 与 htop 进程监控技巧

top 命令为什么默认看不到完整命令路径?

因为 top 默认只显示进程名(如 python),不显示启动时的完整命令行,容易误判是哪个服务在跑。比如多个 python 进程,你根本分不清哪个是 django、哪个是 Celery。

解决办法很简单:启动时加 -c 参数,或运行中按 c 键切换:

  • top -c —— 启动即显示完整命令,例如 /usr/bin/python3 /opt/app/manage.py runserver
  • 已进入 top 后,直接按 c 键即可切换视图(再按一次恢复)
  • 注意:如果进程是用 exec 启动或被重命名过(如 prctl(PR_SET_NAME)),-c 也可能显示不全,这时得结合 ps -f -p PID 补充确认

htop 中怎么快速定位并杀掉某个异常进程?

top 多一步操作,但更安全、更直观:先搜再选再发信号,避免手抖输错 PID。

  • 启动后按 F3,输入关键词(如 node12345),光标自动跳转到首个匹配项
  • 用方向键上下移动,或鼠标点击选中目标进程
  • F9 弹出信号菜单,**别直接选 SIGKILL(9号)**——优先试试 SIGHUP(1号)或 SIGTERM(15号),给进程留出清理资源的机会
  • 确认前看一眼左侧 USERTIME+:如果是 root 用户且运行时间极短(比如刚 fork 出来就占满 CPU),大概率是异常子进程

监控单个关键进程时,top 和 htop 的参数陷阱

很多人用 top -p PID 想盯死一个进程,结果发现刷新几次后界面“空了”——其实是该进程退出后 top 不自动退出,也不报错,就卡在那儿不动。

  • top -p 1234 只在进程存在时有效;一旦 1234 消失,top 仍运行但无输出,容易误以为卡死
  • htop -p 1234 行为类似,但至少会显示“Process not found”,更友好
  • 真正稳的做法是加 -d 控制刷新,并配合 shell 循环检测:while kill -0 1234 2>/dev/NULL; do top -d 1 -p 1234 -n 1; sleep 1; done
  • 如果只是想看历史资源趋势,不如用 pidstat -p 1234 1 10(需 sysstat 包),它会明确告诉你进程是否还活着

为什么 htop 安装后中文显示乱码或颜色错乱?

不是 htop 本身的问题,而是终端环境没对齐。尤其在远程 sshcentos/RHEL 时高频出现。

  • 先检查终端编码:echo $LANG,必须是 en_US.UTF-8zh_CN.UTF-8;如果不是,临时修复:export LANG=en_US.UTF-8
  • 确保 SSH 客户端(如 windows 上的 PuTTY 或 Windows Terminal)也设置为 UTF-8 编码
  • CentOS 7/8 安装 htop 必须先启用 EPEL:yum install epel-release,否则装的是老旧阉割版,连鼠标支持都没有
  • 如果用了 zsh + oh-my-zsh,某些主题会覆盖 LS_COLORS,导致 htop 颜色失效,可临时用 bash 启动验证

实际用的时候,最常被忽略的是信号选择和编码环境——杀进程不问信号类型,跟拔电源没区别;终端编码不对,htop 再 fancy 也白搭。

text=ZqhQzanResources