指南/哪个App在使用某个文件

如何在Mac上找出哪个App在使用某个文件

Atta 🐬

Vitals创始人

发布于

简要回答

要在Mac上找出哪个App打开了某个文件,在“终端”中输入lsof和一个空格,把文件拖到窗口中,然后按下Return键。第一列就是进程名。对于文件夹,lsof +D会列出其中打开的所有东西。在活动监视器中,连按一个进程并打开“打开的文件和端口”,适合你已经怀疑某个App的时候。退出那个App,文件就空出来了。Vitals是一款Mac活动监视器和进程检查器,可以一次搜索所有打开的文件:在“打开的文件”中输入名称的一部分,占用它的App就会列出来。

如何用“终端”找出使用某个文件的App

  1. 01 打开“终端”,它在“应用程序”→“实用工具”中。
  2. 02 输入lsof和一个空格,把文件从访达拖到窗口中,然后按下Return键。
  3. 03 看前两列:进程名和它的PID。没有输出表示你自己的进程都没有打开这个文件。
  4. 04 在前面加上sudo再运行一次,即可包括macOS和其他用户运行的进程。
  5. 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会显示是谁打开了某个文件。它不会解锁文件,也不会更改文件的权限。
  • “打开的文件”在窗口中,不在菜单栏下拉面板中。
购买Vitals $29 首发期间$29即可终身使用,首发期后$49,一次付款,14天内可退款。或一年更新$15。

常见问题

如何在Mac上查看哪个进程在使用某个文件?

在“终端”中运行lsof,后面加上文件路径。第一列是进程,第二列是它的PID。

为什么我的Mac提示项目正在使用中?

某个App或预览仍打开着这个文件。关闭文稿、退出App或关闭快速查看预览,然后再试。

如何在Mac上删除正在使用中的文件?

用lsof找到那个App并退出它,然后把文件移到废纸篓。如果什么都没列出,就重新启动Mac,然后再删除。

活动监视器会显示打开的文件吗?

会,但一次只看一个进程:连按一个进程,然后打开“打开的文件和端口”。它无法在所有进程中搜索某个文件。

lsof需要sudo吗?

不用sudo时,它只列出你自己的进程。用sudo时,也会包括macOS自己的进程,比如“聚焦”的进程。

有没有能显示哪个App打开了某个文件的App?

Vitals可以。在它的“打开的文件”部分输入文件名的一部分,占用这个文件的App就会列出来,不论在哪个磁盘上。

术语表中的相关条目

更多指南