watch 是 linux 中用于定期执行命令并实时刷新结果的监控工具,支持间隔设置、高亮变化、去标题栏、精准进程匹配及服务状态检查等功能。

watch 是 Linux 中一个轻量但非常实用的命令,它能让你以固定间隔重复执行任意命令,并在终端中实时刷新显示结果,特别适合监控进程、系统资源或文件变化。
基础用法:每 2 秒运行一次 ps 查看指定进程
最常见场景是监控某个进程是否存在或状态是否变化。比如查看 nginx 进程:
-
watch -n 2 'ps aux | grep nginx'—— 每 2 秒执行一次,高亮显示变动部分 -
-n 2表示间隔 2 秒(默认是 2 秒,可省略) - 命令必须用单引号包裹,避免 shell 提前解析管道符或变量
- 首次运行会清屏并显示结果,后续刷新只更新内容区域
增强可读性:关闭标题栏 + 高亮差异
默认 watch 会在顶部显示命令、时间、间隔等信息,有时干扰观察。可用选项优化:
watch -n 1 -t -d 'ps -eo pid,ppid,comm,%cpu,%mem --sort=-%cpu | head -5'-
-t去掉顶部标题栏,只留命令输出 -
-d高亮每次刷新时发生变化的字段(如 CPU 占用跳变) -
--sort=-%cpu按 CPU 使用率降序排列,head -5只看前 5 个最耗资源的进程
监控多条件:结合 pgrep 或 systemctl 精准判断
单纯靠 ps | grep 容易误匹配(比如 grep 自身也出现在结果里)。更可靠的方式:
watch -n 3 'pgrep -f "python.*server.py" >/dev/null && echo "RUNNING" || echo "STOPPED"'-
pgrep -f按完整命令行匹配,更准确;配合&&/||输出状态提示 - 监控服务状态:
watch -n 5 'systemctl is-active nginx',直接返回 active/inactive - 想看详细信息可加
systemctl status nginx --no-pager,但注意输出较长时可能滚动不便
退出与自定义:停止监控和调整显示
watch 运行中按 Ctrl+C 即可退出,不会影响被监控的进程。
- 想让输出更紧凑:加
-x选项,用sh -c执行复杂命令,例如watch -n 2 -x sh -c 'echo $(date): $(uptime | awk "{print \$10}")' - 需要更高精度(如 0.5 秒):
watch -n 0.5 'free -h | grep Mem:',支持小数秒 - 如果命令执行时间接近或超过间隔,watch 会等上一轮结束再启动下一轮,不会并发运行
不复杂但容易忽略细节,掌握这几个常用组合就能覆盖大多数进程监控需求。











