如何在 Mac 上找出哪个进程正在使用驱动器
Mac 不肯推出你的驱动器?这里教你如何精确找出是哪个进程在阻止它——使用活动监视器、Terminal,以及一种更快的一键方法。
当 macOS 拒绝推出外置驱动器时,它会告诉你有东西正在使用它——然后就到此为止。没有名称,没有线索,没有提示。要自己找出罪魁祸首得花上几个步骤,但这完全可以做到。本指南将逐一介绍每种方法,从 Apple 自带的内置工具,到能揭示图形界面所隐藏内容的 Terminal 命令。
为什么 macOS 不直接告诉你
这是一种实实在在的挫败感,而非用户操作失误。macOS 一直都只显示“磁盘正在使用”的错误,却不指明那个肇事的进程。操作系统明明知道是哪个进程在该宗卷上持有打开的文件句柄——它只是不在访达或推出对话框里显示这个信息。
结果就是:你关掉了每一个可见的 App,却毫无变化,驱动器依然不肯推出。正如 macOS“磁盘正在使用”错误排查指南所述,阻止者往往是一个后台进程——聚焦正在索引、快速查看正在生成缩略图,或某个云同步守护进程——而非任何你会想到手动退出的东西。
方法一:活动监视器(有限,但可作为起点)
活动监视器是大多数人首先查看的地方。它对这个特定任务并不理想,但能帮你缩小范围。
- 打开活动监视器(“应用程序”→“实用工具”→“活动监视器”,或用聚焦搜索)。
- 点按顶部的磁盘标签。
- 按读取的字节数或写入的字节数排序,以查看哪些进程正在积极读取或写入。
问题在于:活动监视器显示的是所有宗卷的磁盘活动,而不只是你的外置驱动器。列表顶部的某个进程可能正在向内置 SSD 写入,而非 USB 驱动器。在这里你无法按宗卷筛选。
不过,如果你发现了什么意外的东西——一个备份守护进程、一个媒体 App、一项同步服务——还是值得退出它再试着推出一次。
方法二:用 Terminal 配合 lsof(可靠的途径)
lsof 代表“列出打开的文件”(list open files),而在 macOS 上,每一个已装载的宗卷都是一个文件路径。这条命令会显示每一个在特定驱动器上持有打开句柄的进程。
找到驱动器的装载点
首先,确认 macOS 所看到的驱动器的确切名称:
ls /Volumes/
这会列出所有已装载的宗卷。你的外置驱动器会出现在这里——记下确切的名称,包括大小写和空格。
对该宗卷运行 lsof
lsof /Volumes/YourDriveName
将 YourDriveName 替换为实际的宗卷名称。输出会列出每一个在该宗卷上持有打开文件的进程,包括:
- COMMAND——进程名称
- PID——进程 ID
- USER——运行它的是哪个用户账户
- NAME——正被访问的具体文件路径
你通常会看到什么
在 lsof 输出中出现的常见肇事者:
mds或mds_stores——聚焦索引QuickLookUIService——快速查看缩略图生成cloudd、bird或com.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 表格时,这很有用。
常见的阻止进程及其应对方法
聚焦(mds、mds_stores)
聚焦会自动为新驱动器编制索引。如果你连接了一个大容量驱动器,索引可能会运行几分钟乃至几小时。你可以打开系统设置 → Siri 与聚焦 → 聚焦隐私并将该驱动器添加到排除列表,来临时停止它。或者,通过 Terminal 退出 mds——聚焦稍后会自行重启。
快速查看(QuickLookUIService)
当你在访达中浏览驱动器时,快速查看会生成预览缩略图。即便你关闭了访达窗口,它也可能仍持有打开的文件句柄。快速查看正在扣押你的驱动器一文对此有详细讲解——简短的修复方法是通过 Terminal 或专门的工具退出快速查看进程。
iCloud 和 Dropbox
如果你在外置驱动器上存放了同步数据,同步服务就会像对待任何其他文件夹一样对待它。它们会在上传或冲突解决期间持有文件处于打开状态。如何阻止 iCloud 和 Dropbox 妨碍驱动器推出解释了如何在推出前暂停同步。
访达
如果你有一个显示着驱动器内容的窗口处于打开状态,或有一项文件拷贝正在进行,访达本身就会阻止推出。请关闭所有指向该驱动器的访达窗口,或从苹果菜单退出并重新打开访达。
媒体与创意类 App
Final Cut Pro、Premiere、Logic 以及类似的 App 只要项目仍处于载入状态,就会一直保持项目文件打开。请在推出前关闭项目——而不只是关闭 App 窗口。针对具体工作流程的建议,请参阅在 Final Cut Pro 中使用外置驱动器而不出现推出问题。
为什么 Terminal 不适合日常使用
lsof 这套方法管用,但它有摩擦。你需要:
- 打开 Terminal
- 知道确切的宗卷名称
- 解析陌生的输出
- 查对 PID 和进程名称
- 运行一条单独的 kill 命令
- 切回访达去推出
如果你是常驻 Terminal 的开发者或系统管理员,那没问题。但如果你是只想安全拔掉驱动器的视频剪辑师或日常 Mac 用户,那对于一件本该两秒钟搞定的事来说,这套仪式实在太繁琐了。
警告: 即便你不耐烦,也别不推出就直接拔掉驱动器——这可能损坏文件系统,在格式化为 exFAT 或 NTFS 的驱动器上尤其如此。风险是实实在在的,不推出就拔掉外置驱动器会损坏它吗?一文对此有详细讲解。
更快的方法:一眼看清阻止进程
Ejecta 做的正是 lsof 所做的事,但它会在你需要的那一刻把结果呈现在菜单栏里。点按图标,看清哪个进程正占用着你的驱动器,点一下退出它,然后推出——无需 Terminal,无需解析,无需在窗口之间切换。
它能应对最让人栽跟头的那些情况:聚焦在后台运行、快速查看扣着一份缩略图缓存、一个不肯松手的同步守护进程。进程名称就清清楚楚地摆在那里,只需一个动作即可解决。
快速参考:该用哪种方法
| 情形 | 最佳方法 |
|---|---|
| 你想弄明白正在发生什么 | 在 Terminal 中用 lsof |
| 你需要一个快速的一次性答案 | 在 Terminal 中用 fuser |
| 你经常做这件事、希望毫无摩擦 | Ejecta 菜单栏 App |
| 你正在排查一个顽固的系统进程 | sudo lsof + kill |
如果你经常撞上“磁盘正在使用”这堵墙,下载 Ejecta,让阻止进程的名称离你只有一键之遥——无需 Terminal。