watch 命令不支持 -p 选项,正确做法是用 watch 配合 ps 或 pidstat 监控指定 pid:如 watch -n 1 'ps -p -o pid,cmd,%cpu,%mem,rss' 或 pidstat -p 1。

watch -p 并不是 watch 命令的合法选项,Linux 中的 watch 命令本身**不支持直接通过 -p 指定 PID 监控进程**。你可能混淆了其他工具(如 pidstat、htop 或自定义命令)的用法。
正确做法:用 watch 配合 ps 或 top 命令动态监控指定 PID
要实现“固定 PID 的资源占用(CPU、内存等)实时刷新显示”,核心思路是:用 watch 执行一条能按 PID 精确输出该进程资源信息的 shell 命令。常用组合如下:
-
监控 CPU 和内存使用率(推荐):
watch -n 1 'ps -p <pid> -o pid,ppid,cmd,%cpu,%mem,vsz,rss,etime --no-headers'</pid>
✅-n 1表示每 1 秒刷新一次;-p <pid></pid>精确匹配进程;-o自定义输出字段,清晰直观。 -
只看关键指标(简洁版):
watch -n 0.5 'ps -p <pid> -o %cpu,%mem,rss,vsz --no-headers | awk '{printf "CPU:%.1f%% MEM:%.1f%% RSS:%dKB VSZ:%dKB\n", $1,$2,$3,$4}''</pid>
✅ 每 0.5 秒刷新,用awk格式化输出,更易读。 -
监控线程级资源(含子线程):
watch -n 1 'ps -T -p <pid> -o tid,%cpu,%mem,time,cmd --no-headers | head -10'</pid>
✅-T显示线程,tID是线程 ID,适合排查高 CPU 线程。
替代方案:用 pidstat(更专业、低开销)
pidstat 是 sysstat 包中的专用进程性能监控工具,比反复调用 ps 更精准、开销更低:
- 安装(如未安装):
sudo apt install sysstat(Debian/Ubuntu)或sudo yum install sysstat(RHEL/CentOS) - 每秒刷新指定 PID 的 CPU 和内存:
pidstat -p <pid> 1</pid> - 只看 CPU 和内存,精简输出:
pidstat -p <pid> -u -r 1</pid>
(-u:CPU,-r:内存,1:间隔秒数)
小技巧:快速获取 PID 并一键监控
如果进程名已知(比如 nginx),可免去手动查 PID:
- 监控第一个匹配进程:
watch -n 1 'ps -p $(pgrep -f "nginx" | head -1) -o pid,cmd,%cpu,%mem,rss --no-headers' - 加个判断防空 PID(更健壮):
watch -n 1 'pid=$(pgrep -f "your_process_name"); [ -n "$pid" ] && ps -p "$pid" -o pid,cmd,%cpu,%mem,rss --no-headers || echo "Process not found"'
注意避坑
-
watch -p会报错:No such option —— watch 没有-p参数。 - 避免用
top -p <pid></pid>配合 watch:top本身是交互式程序,非脚本友好,容易卡住或输出异常。 - 高频刷新(如
-n 0.1)可能增加系统负担,生产环境建议 ≥0.5 秒。 - 权限问题:监控其他用户进程需
sudo(如sudo watch ... ps -p ...)。











