Linux中每秒刷新进程监控最常用方式是while循环加sleep 1配合ps、top -b -n1或pgrep;推荐用while true; do ps aux --sort=-%cpu | head -n 5; echo "---"; sleep 1; done,或watch -n 1 'ps aux --sort=-%mem | head -n 6'。

在 Linux 中实现每秒刷新一次进程监控,最常用、最简洁的方式是用 while 循环 + sleep 1 配合 ps、top -b -n1 或 pgrep 等命令。不需要复杂脚本,一条命令就能搞定。
用 while + sleep 实时轮询(推荐)
这是最直接可控的方法,适合自定义筛选和格式化输出:
-
while true; do ps aux --sort=-%cpu | head -n 5; echo "---"; sleep 1; done
每秒显示 CPU 占用前 5 的进程,加分割线便于区分刷新周期 -
while sleep 1; do clear; ps -eo pid,ppid,%cpu,%mem,comm --sort=-%cpu | head -n 10; done
每秒清屏并显示资源占用最高的 10 个进程,视觉更清晰
用 watch 命令替代循环(更轻量)
watch 是专为周期性执行设计的工具,默认 2 秒间隔,可设为 1 秒:
-
watch -n 1 'ps aux --sort=-%mem | head -n 6'
每秒刷新,显示内存占用前 5 的进程(含表头共 6 行) -
watch -n 1 -d 'pgrep -f nginx | wc -l'
高亮变化地统计 nginx 进程数,-d 参数让变动部分闪烁
监控指定进程是否存在或状态变化
如果只关心某个服务是否存活,可用更轻量的判断逻辑:
while sleep 1; do if pgrep -x "sshd" > /dev/null; then echo "$(date): sshd ✔"; else echo "$(date): sshd ✘"; fi; done- 配合
systemctl is-active:while sleep 1; do systemctl is-active docker 2>/dev/null | sed "s/^/$(date +%T): /"; done
注意事项和优化建议
避免常见坑,让监控稳定又省资源:
- 慎用
top -d 1:它本身是交互式程序,非批处理模式下在脚本中可能卡住;应改用top -b -n1 -d1(但不如ps轻量) - 减少输出量:加
| head或--no-headers可降低终端渲染压力 - 退出方式:按
Ctrl+C终止所有上述命令;若后台运行,记下 PID 或用pkill -f "your_command"关闭 - 如需日志记录,可在循环末尾追加
>> monitor.log 2>&1,但注意文件增长











