指南/哪個App在使用檔案
如何在Mac上找出哪個App在使用某個檔案
簡短回答
若要找出Mac上是哪個App打開了某個檔案,請在「終端機」中輸入lsof和一個空格,把檔案拖到視窗中,然後按下Return。第一欄就是程序名稱。如果是檔案夾,lsof +D會列出其中打開的所有項目。在活動監視器中,按兩下一個程序並打開「打開的檔案和連接埠」,這在你已經懷疑是某個App時很有用。結束那個App,檔案就釋放了。Vitals是一款Mac活動監視器和程序檢查器,能一次搜尋所有打開的檔案:在「打開的檔案」中輸入名稱的一部分,就會列出佔用它的App。
如何用「終端機」找出在使用檔案的App
- 01 打開「終端機」,它位於「應用程式」→「工具程式」。
- 02 輸入
lsof和一個空格,從Finder把檔案拖到視窗中,然後按下Return。 - 03 看前兩欄:程序名稱和它的PID。沒有輸出表示你的程序都沒有打開這個檔案。
- 04 在前面加上
sudo再執行一次,就會包括macOS和其他使用者執行的程序。 - 05 結束它列出的App。對於沒有視窗的程序,執行
kill <PID>並加上它的PID。
這個程序可能是輔助程式而不是App:QuickLookUIService屬於快速查看,名稱以Helper結尾的則屬於名稱前半段的那個App。
程式打開檔案時,macOS會讓檔案保持忙碌,所以垃圾桶不肯刪除它、重新命名會失敗,或磁碟無法退出。只要知道去哪裡找,程序很容易找到。下表把每種訊息和它常見的原因配對。
檔案正在使用中:你看到的訊息,以及可能的原因
| 你看到的 | 可能的原因 | 怎麼做 |
|---|---|---|
| 「無法完成操作,因為項目正在使用中」 | 有App打開了檔案,或快速查看正在預覽它 | 關閉文件或預覽,然後再試一次 |
| 垃圾桶清不掉 | 垃圾桶裡的某個檔案仍在某個App中打開著 | 結束App,或重新開機後清空垃圾桶 |
| 檔案無法重新命名或搬移 | 有App正在寫入它 | 等儲存或輸出完成 |
| 磁碟無法退出 | 上面有檔案或檔案夾打開著 | 請參閱Mac無法退出磁碟 |
| 檔案已鎖定 | 「取得資訊」中勾選了「已鎖定」,這和正在使用中不一樣 | 在「取得資訊」中取消勾選「已鎖定」 |
在活動監視器中尋找
活動監視器無法跨檔案搜尋。如果你懷疑是某個App,就按兩下它,打開「打開的檔案和連接埠」標籤頁,在列表中找那個檔案的路徑。忙碌的App列表會很長,而且一次只涵蓋一個程序。
解讀lsof的輸出結果
每一行是一個打開的檔案。COMMAND是程序,PID是它的編號,FD是檔案的打開方式,NAME是路徑。在FD中,數字後面加r表示讀取、w表示寫入、u表示兩者皆是;cwd是程序工作所在的檔案夾,txt是程式本身和它載入的程式庫。
某個程序打開的所有項目
若要反過來從程序查它的檔案,請執行lsof -p <PID>並加上它的PID。lsof -c Preview會列出名稱以你給的字母開頭的每個程序的檔案。
檔案在垃圾桶裡時
只要垃圾桶裡有任何檔案打開著,就無法清空垃圾桶。結束打開它的App。如果你看不出是哪個,lsof +D ~/.Trash會列出那裡打開的項目;「終端機」可能需要「完整磁碟取用權限」才能查看。重新開機會關閉所有東西,之後垃圾桶就能清空了。
沒有東西打開它時
如果加上sudo後lsof仍什麼都沒印出,檔案就沒有在使用中。仍然無法更改的檔案,可能是已鎖定、屬於其他使用者,或位於以唯讀方式裝載的磁碟上。「取得資訊」會顯示「已鎖定」註記框和權限。
Vitals多了什麼
Vitals會依名稱搜尋Mac上所有打開的檔案。
- 「開發者」標籤頁中的「打開的檔案」:按⌘F,輸入檔案名稱或路徑的一部分,佔用相符檔案的每個App都會列出
- 依App分組,而不是依程序:輔助程式會算在它所屬的App底下
- 每個App在磁碟上的檔案,以及有幾個是為寫入而打開的
- 在同一列中結束App,確認後執行
小提醒
- 沒有「完整系統指標」時,macOS自己的程序所打開的檔案不會列出,Vitals會說明略過了幾個。
- Vitals會顯示是誰打開了檔案。它不會解鎖檔案,也不會更改檔案的權限。
- 「打開的檔案」在視窗中,不在選單列下拉式面板中。
大家常問的問題
如何在Mac上查看是哪個程序在使用某個檔案?
在「終端機」中執行lsof,後面加上檔案的路徑。第一欄是程序,第二欄是它的PID。
為什麼我的Mac說項目正在使用中?
某個App或預覽仍然打開著這個檔案。關閉文件、結束App或關閉快速查看預覽,然後再試一次。
如何在Mac上刪除正在使用中的檔案?
用lsof找出那個App並結束它,然後把檔案移到垃圾桶。如果什麼都沒列出,就重新開機後再刪除它。
活動監視器會顯示打開的檔案嗎?
會,但一次只顯示一個程序:按兩下一個程序,然後打開「打開的檔案和連接埠」。它無法跨所有程序搜尋某個檔案。
lsof需要sudo嗎?
不加sudo時,它只列出你自己的程序。加上sudo後,macOS自己的程序也會包括在內,例如Spotlight的。
有沒有能顯示是哪個App打開了檔案的App?
Vitals就可以。在它的「打開的檔案」區塊中輸入檔案名稱的一部分,不論在哪個磁碟,佔用它的App都會列出。
詞彙表中的相關條目
更多指南
- Mac為什麼這麼慢
- 是什麼在消耗Mac的電池
- 哪個App在使用我的CPU或記憶體
- Mac為什麼無法睡眠
- Chrome占用太多記憶體
- 為什麼Mac的風扇這麼吵
- 如何控制Mac的風扇轉速
- 如何釋放Mac的RAM
- 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溫度監控工具