系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

ps

在 macOS 上按 BSD 语法抓取进程快照,查 PID、资源与父子关系。

补充说明

macOS 的 ps 来自 BSD,不是 Linux 的 procps:没有 /proc,也不支持 GNU 的 --sort;-C 和 -L 虽然存在,但含义不同(-C 改变 CPU 百分比的计算方式,-L 列出可用的格式化关键字),照抄 Linux 用法会出错。常用组合是 aux(BSD 风格,含其他用户进程)和 -axo(自定义列),排序交给 sort,或直接用 -r(按 CPU)、-m(按内存)。按名字找进程用 pgrep,不要用 ps | grep。

边界:ps 是一次快照,CPU、内存都是采样或累计值,实时观察用 top。macOS 的状态码与 Linux 不同:U 表示不可中断等待(Linux 常写 D),I 表示空闲,僵尸仍是 Z。系统进程和 launchd 管理的守护进程,普通用户看到的字段可能不完整。

常用示例

# 1. BSD 组合看全量进程;ww 防止长命令行被截断
% ps auxww | head -20

# 2. 按 CPU 排序取前 10;-A 选全部进程,-r 按当前 CPU 排序
% ps -A -r -o pid,ppid,%cpu,%mem,etime,comm | head -11

# 3. 查单个进程的父进程、状态和常驻内存
% ps -p "$(pgrep -x Finder)" -o pid,ppid,state,%cpu,rss,command

# 4. macOS 专有:查看某进程的线程(-M)
% ps -M "$(pgrep -x WindowServer)" | head -15

# 5. 精确匹配命令行,避免 grep 匹配自身
% ps -axo pid,stat,command | grep '[s]shd'

# 6. 找僵尸进程:STAT 以 Z 开头
% ps -axo pid,ppid,stat,command | awk '$3 ~ /^Z/'

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. macOS 的 ps 为什么不能照抄 Linux 的 ps --sort=-%cpu?替代写法是什么?
  2. STAT 里的 U 和 Z 分别表示什么?哪个能靠 kill -9 清掉?
  3. 脚本里判断 PID 是否存在,为什么用 kill -0 比解析 ps 输出更稳?
答案
  1. macOS 用 BSD 版 ps,不支持 --sort;可用 ps -A -r 按 CPU、ps -A -m 按内存,或把 -o 输出交给 sort -k。
  2. U 是不可中断等待(等 I/O),Z 是已退出待回收的僵尸;两者都不能靠 kill -9 解决,僵尸只能由父进程回收。
  3. kill -0 只做存在性和权限检查、不发送信号,退出码直接可用;ps 的输出格式和列宽会随版本、终端变化,不适合解析。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令