实时查看进程的 CPU、内存、线程占用,按列排序并观察系统负载。
macOS 的 top 是交互式监视器,默认每秒刷新;-l 指定采样次数,-s 指定间隔,-n 限制进程数,-o 选择排序键(cpu、mem、time),-stats 自定义列,-pid 只看指定进程。脚本里通常用 top -l 1 -stats ... 取一段快照。
边界:第一份采样是开机以来的累计值,CPU 百分比会虚高,判断瞬时负载至少取 -l 2 看第二份。它和 ps 的快照、活动监视器的图表不是同一套口径;-l 0 表示无限采样,不会自己退出,脚本里不要这么写。
# 1. 取一份快照,只看 CPU 最高的 10 个进程
% top -l 1 -n 10 -o cpu -stats pid,command,cpu,mem
# 2. 两次采样,第二份才是区间内的真实占用
% top -l 2 -s 2 -n 8 -o cpu
# 3. 按内存排序,排查内存压力
% top -l 1 -n 10 -o mem -stats pid,command,mem,rsize,threads
# 4. 只盯一个进程,适合观察 WindowServer 或编译进程
% top -pid "$(pgrep -x WindowServer)" -l 1 -stats pid,command,cpu,mem,threads
# 5. 需要查看其他用户进程的完整信息时用 sudo
% sudo top -l 1 -n 5 -o cpu -stats pid,user,command,cpu
# 6. 交互模式:s 改刷新间隔,n 改进程数,o 改排序,q 退出
% top
top -l 1 就下结论,CPU 百分比来自开机累计值,容易误判;用 -l 2 -s 1 看第二份。top -l 0 当“不采样”写进脚本,实际是无限循环;需要固定次数就写正整数。-o 的键不是任意列名,常用 cpu、mem、time;要展示列用 -stats,两者别混。q 退出;在管道或 cron 里运行必须加 -l,否则会等待终端输入。mem(百分比)、rsize(常驻)、vsize(虚拟);vsize 很大不代表真占用,比较内存看 rsize 和内存压力。pgrep。ps — 一次性快照,适合脚本取字段。kill、killall — 结束异常占用进程。caffeinate、pmset — 观察和调整电源、睡眠行为。top — 对照 Linux 的交互键和字段。合上页面,先回答,再展开对照。
top -l 1 的 CPU 百分比通常不能直接用来判断当前负载?-l、-n、-o、-stats 应该怎么配合?vsize 很大但 rsize 很小,说明什么?该看哪个指标?-l 2 取第二份,或结合 ps/活动监视器判断。top -l 1 -n 10 -o cpu -stats pid,command,cpu,mem:一次采样、十个进程、按 CPU 排序、只输出指定列。rsize、mem 和系统内存压力。
小程序版
微信扫码,随时查命令