mac系统中“打开句柄数”即文件描述符数,需用lsof -p pid | wc -l(减1)或proc_pidinfo api统计;/proc/self/fd不适用;活动监视器可查看近似值。

Mac系统中没有Windows那种统一的“句柄”概念,但所有打开的文件、网络连接、管道等资源都映射为文件描述符(file descriptor),查看当前进程的打开文件描述符数量,就是实际意义上的“打开句柄数”。
用 lsof 命令统计当前进程的打开文件数
打开终端,执行以下命令:
lsof -p 【你的进程PID】 | wc -l
这会列出指定进程所有打开的文件项(含socket、目录、设备等),再用wc -l统计行数。注意:首行是表头,真实数量需减1——例如输出37,实际打开文件数为36。
若不确定PID,先用ps aux | grep 关键词查出目标进程ID。
用 /proc/self/fd 方式不可行,Mac不支持该路径
Linux下常用opendir("/proc/self/fd")统计,但macOS完全不提供/proc文件系统。强行访问/proc/self/fd会提示“No such file or directory”,此路不通。
【必须改用libproc或lsof】,这是macOS唯一可靠的原生方案。
用 proc_pidinfo 获取精确FD数量(编程方式)
方法一:C++代码直接调用系统API
包含头文件 #include
方法二:终端一行命令替代(无需编译)
lsof -p $$ 2>/dev/null | tail -n +2 | wc -l
$$ 表示当前shell进程ID;tail -n +2 跳过表头;2>/dev/null 屏蔽权限拒绝错误(如某些系统fd无法读取)。这个结果可直接当作当前shell的打开句柄数。
在活动监视器中查看全局进程FD趋势
第一步:打开“活动监视器” → 切换到“内存”或“CPU”标签页
第二步:点顶部菜单栏“显示”→“列”→勾选“打开的文件”
第三步:列表中会出现“打开的文件”列,显示每个进程当前打开的文件描述符估算值
注意:该数值是活动监视器基于内核信息推算的近似值,不是实时精确计数,但足以识别异常高FD占用的进程。











