在 macos 终端中查看指定进程打开的所有文件,最直接方法是使用 lsof -p [pid];需先通过 pgrep 或 ps aux 获取 pid,再用 lsof 列出包括文件、网络连接等所有句柄,并可配合 grep 筛选 reg、txt、ipv4 等类型。
在 macos 终端中查看指定进程打开的所有文件,最直接、可靠的方法是使用 lsof(list open files)命令配合进程标识符(pid)或进程名。因为 macos 将一切视为文件(包括网络连接、设备、共享内存等),lsof 能完整列出该进程当前持有的所有文件句柄。
先获取目标进程的 PID
要查某个进程打开的文件,得先知道它的 PID。常用两种方式:
- 如果知道进程名(如
Chrome或node),用:pgrep -f "Chrome"或pgrep -x "python3"(-x表示精确匹配进程名,-f匹配完整命令行) - 如果已知部分命令行内容(比如启动了一个 server.py),可用:
ps aux | grep server.py | grep -v grep,从结果中第一列提取 PID
用 lsof 列出该进程打开的所有文件
拿到 PID 后,执行:
lsof -p [PID]
例如 PID 是 1234,则运行:lsof -p 1234
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
输出包含多列:COMMAND(进程名)、PID、USER、FD(文件描述符)、TYPE(类型,如 REG 文件、IPv4 网络套接字)、NODE(节点号)、NAME(路径或地址)。重点关注 NAME 列——它显示实际打开的文件路径、监听的 IP:Port 或设备节点。
常见 FD 类型说明:
• txt:主可执行文件(即该进程真正运行的二进制路径)
• cwd:当前工作目录
• mem:内存映射文件(如动态库 .dylib)
• IPv4/IPv6:网络连接或监听端口
• REG:普通磁盘文件
快速筛选关键信息
实际使用中常需聚焦特定类型,可用管道过滤:
- 只看打开的普通文件:
lsof -p 1234 | grep "REG" - 只看主程序路径(txt 映射):
lsof -p 1234 | grep "txt" | head -1 - 只看网络相关(端口/连接):
lsof -p 1234 | grep -E "(IPv4|IPv6|TCP|UDP)" - 避免权限不足提示(某些系统文件需 root 权限才能读取路径):
加sudo:sudo lsof -p 1234
补充:直接按进程名查(不推荐用于多实例场景)
若确认该进程名唯一,也可跳过 PID 获取步骤:lsof -c "Chrome"(-c 按 COMMAND 名匹配)
但注意:多个 Chrome 实例会混在一起,且可能漏掉子进程;建议优先用 PID 方式更精准。










