指南/哪个App在使用某个文件
如何在Mac上找出哪个App在使用某个文件
简要回答
要在Mac上找出哪个App打开了某个文件,在“终端”中输入lsof和一个空格,把文件拖到窗口中,然后按下Return键。第一列就是进程名。对于文件夹,lsof +D会列出其中打开的所有东西。在活动监视器中,连按一个进程并打开“打开的文件和端口”,适合你已经怀疑某个App的时候。退出那个App,文件就空出来了。Vitals是一款Mac活动监视器和进程检查器,可以一次搜索所有打开的文件:在“打开的文件”中输入名称的一部分,占用它的App就会列出来。
如何用“终端”找出使用某个文件的App
- 01 打开“终端”,它在“应用程序”→“实用工具”中。
- 02 输入
lsof和一个空格,把文件从访达拖到窗口中,然后按下Return键。 - 03 看前两列:进程名和它的PID。没有输出表示你自己的进程都没有打开这个文件。
- 04 在前面加上
sudo再运行一次,即可包括macOS和其他用户运行的进程。 - 05 退出它列出的App。对于没有窗口的进程,用它的PID运行
kill <PID>。
这个进程可能是帮助程序而不是App:QuickLookUIService属于快速查看,以Helper结尾的名称属于它前面那个App。
只要有程序打开着某个文件,macOS就会让它保持占用状态,所以废纸篓不收它、重命名失败或磁盘推不出。知道去哪里找,这个进程就很容易找到。下表把每种提示和它的常见原因对应起来。
文件正在使用中:你看到的提示,以及可能的原因
| 你看到的现象 | 可能的原因 | 怎么做 |
|---|---|---|
| “无法完成操作,因为该项目正在使用中” | 有App打开了这个文件,或快速查看正在预览它 | 关闭文稿或预览,然后再试 |
| 废纸篓清倒不了 | 废纸篓中的某个文件仍在某个App中打开着 | 退出这个App,或重新启动后再清倒废纸篓 |
| 文件无法重命名或移动 | 有App正在写入它 | 等存储或导出完成 |
| 磁盘推不出 | 它上面有文件或文件夹打开着 | 参见Mac推不出磁盘 |
| 文件已锁定 | “显示简介”中勾选了“已锁定”,这和正在使用中不是一回事 | 在“显示简介”中取消勾选“已锁定” |
在活动监视器中查找
活动监视器无法跨文件搜索。如果你怀疑某个App,就连按它,打开“打开的文件和端口”标签页,在列表中找这个文件的路径。忙碌的App列表会很长,而且一次只能看一个进程。
读懂lsof的输出
每一行是一个打开的文件。COMMAND是进程,PID是进程号,FD是文件的打开方式,NAME是路径。在FD中,数字后跟r表示读取,w表示写入,u表示两者都有;cwd是进程工作所在的文件夹,txt是程序本身及它载入的库。
某个进程打开的所有东西
要反过来从进程查它的文件,用它的PID运行lsof -p <PID>。lsof -c Preview会列出名称以你给出的字母开头的每个进程的文件。
文件在废纸篓中时
只要废纸篓中有文件打开着,清倒废纸篓就会失败。退出打开了它的App。如果看不出是哪个,lsof +D ~/.Trash会列出那里打开的东西;“终端”可能需要“完全磁盘访问权限”才能查看。重新启动Mac会关闭一切,之后废纸篓就能清倒了。
没有东西打开它时
如果加上sudo后lsof仍然什么都不打印,说明文件没有在使用中。如果还是改不了,那它可能已锁定、属于其他用户,或者在以只读方式装载的磁盘上。“显示简介”中可以看到“已锁定”复选框和权限。
Vitals能多做什么
Vitals按名称搜索Mac上所有打开的文件。
- “开发者”标签页中的“打开的文件”:按⌘F,输入文件名或路径的一部分,所有占用匹配文件的App都会列出来
- 按App而不是按进程:帮助程序算在它所属的App下
- 每个App在某个磁盘上的文件,以及有多少正在写入
- 在同一行就能退出App,确认后执行
须知
- 没有打开“完整系统指标”时,macOS自己的进程打开的文件不会列出,Vitals会说明漏掉了多少。
- Vitals会显示是谁打开了某个文件。它不会解锁文件,也不会更改文件的权限。
- “打开的文件”在窗口中,不在菜单栏下拉面板中。
常见问题
如何在Mac上查看哪个进程在使用某个文件?
在“终端”中运行lsof,后面加上文件路径。第一列是进程,第二列是它的PID。
为什么我的Mac提示项目正在使用中?
某个App或预览仍打开着这个文件。关闭文稿、退出App或关闭快速查看预览,然后再试。
如何在Mac上删除正在使用中的文件?
用lsof找到那个App并退出它,然后把文件移到废纸篓。如果什么都没列出,就重新启动Mac,然后再删除。
活动监视器会显示打开的文件吗?
会,但一次只看一个进程:连按一个进程,然后打开“打开的文件和端口”。它无法在所有进程中搜索某个文件。
lsof需要sudo吗?
不用sudo时,它只列出你自己的进程。用sudo时,也会包括macOS自己的进程,比如“聚焦”的进程。
有没有能显示哪个App打开了某个文件的App?
Vitals可以。在它的“打开的文件”部分输入文件名的一部分,占用这个文件的App就会列出来,不论在哪个磁盘上。
术语表中的相关条目
更多指南
- Mac为什么这么卡
- 是什么在消耗Mac的电量
- 哪个App在占用CPU或内存
- Mac为什么无法睡眠
- Chrome占用内存过多
- Mac风扇为什么这么吵
- 如何控制Mac的风扇转速
- 如何释放Mac的内存
- Docker占用内存过多
- 如何停止Docker容器
- Mac音量混音器
- Cursor占用CPU过高
- Claude Code占用内存过多
- Claude Code和Codex的用量限额
- Claude App占用CPU过高
- Codex占用CPU过高
- Ollama占用内存过多
- 通过SSH使用Vitals
- 磁盘推不出
- 活动监视器替代品
- iStat Menus替代品
- Stats替代品
- Mac上的任务管理器
- 最佳Mac系统监控工具
- 最佳Mac菜单栏监控工具
- 最佳Mac音量混音器
- Mac上的htop
- Mac版Process Explorer
- 最好用的Mac进程监控工具
- 最好用的Mac温度监控工具