如何在 Mac 上找出哪个进程正在使用驱动器

Mac 不肯推出你的驱动器?这里教你如何精确找出是哪个进程在阻止它——使用活动监视器、Terminal,以及一种更快的一键方法。

当 macOS 拒绝推出外置驱动器时,它会告诉你有东西正在使用它——然后就到此为止。没有名称,没有线索,没有提示。要自己找出罪魁祸首得花上几个步骤,但这完全可以做到。本指南将逐一介绍每种方法,从 Apple 自带的内置工具,到能揭示图形界面所隐藏内容的 Terminal 命令。

为什么 macOS 不直接告诉你

这是一种实实在在的挫败感,而非用户操作失误。macOS 一直都只显示“磁盘正在使用”的错误,却不指明那个肇事的进程。操作系统明明知道是哪个进程在该宗卷上持有打开的文件句柄——它只是不在访达或推出对话框里显示这个信息。

结果就是:你关掉了每一个可见的 App,却毫无变化,驱动器依然不肯推出。正如 macOS“磁盘正在使用”错误排查指南所述,阻止者往往是一个后台进程——聚焦正在索引、快速查看正在生成缩略图,或某个云同步守护进程——而非任何你会想到手动退出的东西。

方法一:活动监视器(有限,但可作为起点)

活动监视器是大多数人首先查看的地方。它对这个特定任务并不理想,但能帮你缩小范围。

  1. 打开活动监视器(“应用程序”→“实用工具”→“活动监视器”,或用聚焦搜索)。
  2. 点按顶部的磁盘标签。
  3. 读取的字节数写入的字节数排序,以查看哪些进程正在积极读取或写入。

问题在于:活动监视器显示的是所有宗卷的磁盘活动,而不只是你的外置驱动器。列表顶部的某个进程可能正在向内置 SSD 写入,而非 USB 驱动器。在这里你无法按宗卷筛选。

不过,如果你发现了什么意外的东西——一个备份守护进程、一个媒体 App、一项同步服务——还是值得退出它再试着推出一次。

方法二:用 Terminal 配合 lsof(可靠的途径)

lsof 代表“列出打开的文件”(list open files),而在 macOS 上,每一个已装载的宗卷都是一个文件路径。这条命令会显示每一个在特定驱动器上持有打开句柄的进程。

找到驱动器的装载点

首先,确认 macOS 所看到的驱动器的确切名称:

ls /Volumes/

这会列出所有已装载的宗卷。你的外置驱动器会出现在这里——记下确切的名称,包括大小写和空格。

对该宗卷运行 lsof

lsof /Volumes/YourDriveName

YourDriveName 替换为实际的宗卷名称。输出会列出每一个在该宗卷上持有打开文件的进程,包括:

  • COMMAND——进程名称
  • PID——进程 ID
  • USER——运行它的是哪个用户账户
  • NAME——正被访问的具体文件路径

你通常会看到什么

lsof 输出中出现的常见肇事者:

  • mdsmds_stores——聚焦索引
  • QuickLookUIService——快速查看缩略图生成
  • clouddbirdcom.apple.iCloudDrive——iCloud 同步
  • backupd——时间机器
  • Finder——指向该驱动器的已打开访达窗口
  • 像 Final Cut Pro 或 Premiere 这样打开着项目文件的媒体 App

提示: 如果 lsof 没有返回任何输出,请尝试用 sudo 以提升的权限运行它:sudo lsof /Volumes/YourDriveName。一些系统进程只有在 root 访问下才会出现。

要更深入地了解 lsof 能做什么——包括按 PID 筛选以及直接从命令行终止进程——请参阅面向 Mac 用户的 lsof 命令详解

从 Terminal 退出该进程

一旦你拿到了 PID,就可以退出该进程:

kill -15 <PID>

如果它没有响应,就升级为强制退出:

kill -9 <PID>

然后再试着推出驱动器。

方法三:用 fuser 作为替代

fuser 是另一条 Terminal 命令,它报告哪些进程正在使用某个文件或文件系统。它没有 lsof 那么啰嗦,但读起来更快:

sudo fuser /Volumes/YourDriveName

输出只是一串 PID 列表。要让进程名称与它们一同显示,可将它与 ps 结合使用:

sudo fuser /Volumes/YourDriveName | xargs ps -p

当你想要一个快速答案、又不必解析一长串 lsof 表格时,这很有用。

常见的阻止进程及其应对方法

聚焦(mdsmds_stores

聚焦会自动为新驱动器编制索引。如果你连接了一个大容量驱动器,索引可能会运行几分钟乃至几小时。你可以打开系统设置 → Siri 与聚焦 → 聚焦隐私并将该驱动器添加到排除列表,来临时停止它。或者,通过 Terminal 退出 mds——聚焦稍后会自行重启。

快速查看(QuickLookUIService

当你在访达中浏览驱动器时,快速查看会生成预览缩略图。即便你关闭了访达窗口,它也可能仍持有打开的文件句柄。快速查看正在扣押你的驱动器一文对此有详细讲解——简短的修复方法是通过 Terminal 或专门的工具退出快速查看进程。

iCloud 和 Dropbox

如果你在外置驱动器上存放了同步数据,同步服务就会像对待任何其他文件夹一样对待它。它们会在上传或冲突解决期间持有文件处于打开状态。如何阻止 iCloud 和 Dropbox 妨碍驱动器推出解释了如何在推出前暂停同步。

访达

如果你有一个显示着驱动器内容的窗口处于打开状态,或有一项文件拷贝正在进行,访达本身就会阻止推出。请关闭所有指向该驱动器的访达窗口,或从苹果菜单退出并重新打开访达。

媒体与创意类 App

Final Cut Pro、Premiere、Logic 以及类似的 App 只要项目仍处于载入状态,就会一直保持项目文件打开。请在推出前关闭项目——而不只是关闭 App 窗口。针对具体工作流程的建议,请参阅在 Final Cut Pro 中使用外置驱动器而不出现推出问题

为什么 Terminal 不适合日常使用

lsof 这套方法管用,但它有摩擦。你需要:

  1. 打开 Terminal
  2. 知道确切的宗卷名称
  3. 解析陌生的输出
  4. 查对 PID 和进程名称
  5. 运行一条单独的 kill 命令
  6. 切回访达去推出

如果你是常驻 Terminal 的开发者或系统管理员,那没问题。但如果你是只想安全拔掉驱动器的视频剪辑师或日常 Mac 用户,那对于一件本该两秒钟搞定的事来说,这套仪式实在太繁琐了。

警告: 即便你不耐烦,也别不推出就直接拔掉驱动器——这可能损坏文件系统,在格式化为 exFAT 或 NTFS 的驱动器上尤其如此。风险是实实在在的,不推出就拔掉外置驱动器会损坏它吗?一文对此有详细讲解。

更快的方法:一眼看清阻止进程

Ejecta 做的正是 lsof 所做的事,但它会在你需要的那一刻把结果呈现在菜单栏里。点按图标,看清哪个进程正占用着你的驱动器,点一下退出它,然后推出——无需 Terminal,无需解析,无需在窗口之间切换。

它能应对最让人栽跟头的那些情况:聚焦在后台运行、快速查看扣着一份缩略图缓存、一个不肯松手的同步守护进程。进程名称就清清楚楚地摆在那里,只需一个动作即可解决。

快速参考:该用哪种方法

情形 最佳方法
你想弄明白正在发生什么 在 Terminal 中用 lsof
你需要一个快速的一次性答案 在 Terminal 中用 fuser
你经常做这件事、希望毫无摩擦 Ejecta 菜单栏 App
你正在排查一个顽固的系统进程 sudo lsof + kill

如果你经常撞上“磁盘正在使用”这堵墙,下载 Ejecta,让阻止进程的名称离你只有一键之遥——无需 Terminal。