See what has files open on a disk, and eject the one that is stuck.

macOS says a disk was not ejected because one or more programs may be using it, and often does not say which. Vitals lists every disk with the apps and programs holding files on it, by name, and Quit Them and Eject does the rest once you say yes.

Memory by Type
82%
in use
App 22.15 GB
Wired 5.67 GB
Compressed 24.54 GB
Cached 10.32 GB
Free 1.32 GB
Memory by App
59.25 GB
all apps
Google Chrome 21.23 GB
VS Code 8.17 GB
Terminal 3.86 GB
Safari 2.69 GB
Other 23.30 GB
Power by App
1.7 W
all apps
GitHub Desktop 427 mW
Google Chrome 367 mW
Zoom 145 mW
Terminal 86 mW
Other 650 mW
Now
27 %
Average today36%
Load3.41
User
19%
Your apps
System
8%
macOS
Cores
12
8 P4 E
Top App
Google Chrome
18.2%
AppCPU
Google Chrome
96 processes
–
Terminal
49 processes
–
Safari
16 processes
–
Docker
9 processes
–
Visual Studio Code
63 processes
–
Slack
13 processes
–
Figma
14 processes
–
Zoom
8 processes
–
In use of 64 GB
52.63 GB
Normal
Free11.37 GB
Swap0 MB
App
23.43 GB
Wired
5.37 GB
Compressed
23.82 GB
Top App
Google Chrome
20.59 GB
AppMemory
Google Chrome
96 processes
–
Visual Studio Code
63 processes
–
Terminal
49 processes
–
Safari
16 processes
–
Docker
9 processes
–
Slack
13 processes
–
Figma
14 processes
–
Zoom
8 processes
–
Free of 994.66 GB
479.72 GB
Used514.94 GB
Written today38.9 GB
Reading
737 kB/s
Writing
195 kB/s
Volumes
2
Macintosh HDBackup
Top App
Photos
121 kB/s
AppWriting
Photos
6 processes
–
Google Chrome
96 processes
–
Docker
9 processes
–
Visual Studio Code
63 processes
–
Xcode
22 processes
–
Mail
4 processes
–
Slack
13 processes
–
Music
5 processes
–
Downloading
12 kB/s
Today4.4 GB
Last 30 days212 GB
Uploading
419 kB/s
Last 7 Days
48.3 GB
Interface
Wi-Fi
en0
Top App
Safari
8 kB/s
AppDownloading
Safari
16 processes
–
Google Chrome
96 processes
–
Slack
13 processes
–
Zoom
8 processes
–
Music
5 processes
–
Mail
4 processes
–
Docker
9 processes
–
Notion
6 processes
–
Apple M2 Max
60 %
Average32%
Peak95%
Memory
1.69 GB
Average
32%
Peak
95%
Top App
Figma
35%
AppGPU
Figma
14 processes
–
Google Chrome
96 processes
–
Safari
16 processes
–
Zoom
8 processes
–
Visual Studio Code
63 processes
–
Xcode
22 processes
–
Slack
13 processes
–
Notion
6 processes
–
16-core Neural Engine
2 %
Average3%
Peak16%
Memory Traffic
79.9 MB/s
Average
3%
Peak
16%
Top App
Photos
3 connections
AppNeural Engine
Photos
6 processes
–
Xcode
22 processes
–
Safari
16 processes
–
Zoom
8 processes
–
Mail
4 processes
–
Notion
6 processes
–
Google Chrome
96 processes
–
On battery
64 %
Remaining2h 46m
Cycles412
Power Draw
12.6 W
Health
76%
Temperature
31°
Top App
Google Chrome
4.3 W
AppPower
Google Chrome
96 processes
–
Zoom
8 processes
–
Figma
14 processes
–
Slack
13 processes
–
Safari
16 processes
–
Visual Studio Code
63 processes
–
Docker
9 processes
–
Music
5 processes
–
CPU
54°
GPU
47°
Hottest
58°
Fan
1,200rpm
Curve
Fans
Fan
Follows the CPU
1,200rpm
FollowsCPU
Full speed6.4k1.2k40°60°80°100°54°
Rules
Quiet on BatteryThe fans follow Quiet while the Mac runs on battery.
Cool While Apps Work HardWhen one of these apps keeps the Mac busy, the fans follow Cool until it has been quiet for a minute. Add App
XcodeNot running
Set every two seconds while Vitals is open Full speed above 95 °C Given back when Vitals quits
Working the Hardest
XcodeCPU 51.4%
8 Sensors
CPU Performance Core54°
CPU Efficiency Core49°
GPU47°
SSD41°
Wi-Fi39°
Battery33°
Airflow Left31°
Airflow Right32°
Last 24 Hours CPU Hottest
80°40°
6 PM12 AM6 AM12 PM
Fastest Fan
6k2k
6 PM12 AM6 AM12 PM
Output
MacBook Pro Speakers
64%
AppStatusVolumeLevel
Music Playing 100%
Zoom Playing 80%
Google Chrome Playing 35%
Slack Silent Muted
Safari Silent 100%
Figma Silent 100%
Notion Silent 100%
Mail Silent 100%
3 connected
Lowest battery: AirPods Pro, left, 42%. Beats Fit Pro is paired but away.
42% Bluetooth Settings
DeviceKindBatteryLevel
AirPods Pro Headphones
Left 42%
Right 58%
Case 80%
Magic Trackpad Trackpad 67%
Magic Keyboard Keyboard 91%
1disk in use
BackupIn Use
External disk
Eject…
Used
612.4 GB
Free
387.6 GB
Files Open
14
Apps
3
Macintosh HDStartup Disk
Internal disk
Used
514.94 GB
Free
479.72 GB
Files Open
31,119
Apps
30
On Backup3
Photos
Working in /Volumes/Backup/Photos Library
9
Terminal
Working in /Volumes/Backup/site-archive
4
corespotlightd
Spotlight, indexing this disk
1
On Macintosh HD30
Google Chrome
Working in ~/Library/Application Support/Google/Chrome
699
Visual Studio Code
Working in ~/Projects/storefront
155
Docker
Working in ~/Library/Containers/com.docker.docker/Data
89
0%
Claude
This week
On pace · 10% to spare
0%
Codex
5-hour session
Resets in 3h 12m
0%
GitHub Copilot
Premium requests
Runs out in 4d at this rate
0%
Cursor
This billing cycle
Resets in 12d 5h
Checkout flow tests Working Waiting for you
Claude Code · storefront · running 48 min
410 MB
Started · 4 Quit Session…
vitest command · 61% CPU 520 MB
node server · port 3,001 240 MB
Google Chrome for Testing browser 310 MB
mcp-server-fetch tool server 64 MB
Codex idle 48 min
docs · in Terminal · Nothing started
290 MB

The numbers are simulated: a web page cannot read your Mac, and should not.

01Disks

Every disk, and whether it can be ejected.

Each connected disk is a card: its name, whether it is internal, external or on the network, how many files are open on it, and In Use or Ready to Eject. Pick one to see who holds it.

  • Internal, external and network disks
  • In Use, or Ready to Eject
  • How many files are open on each
  • Eject from the card, as Finder does
Backup
External disk · 14 files open
In Use Eject
Macintosh HD
Internal disk · 1,066 files open
Startup Disk
T7
External disk · Nothing is open
Ready to Eject Eject
studio-nas
Network disk · 2 files open
In Use Eject
In Use, or Ready to Eject Every disk, with what is open on it
02Who holds it

The apps holding a disk, with the files they hold.

Under the disk is every app and program with something open on it: the folder it is working in, how many files it has open, how many of them for writing, and whether it runs from that disk. Helper processes count under their app.

  • Working folder, open files, files open for writing
  • A Terminal tab sitting in a folder on the disk
  • Spotlight and Time Machine, named for what they are doing
  • Show a file in Finder, or its app in Vitals
On Backup3 apps
Photos9 files, 2 for writing
Photos Library.photoslibrary/database/Photos.sqlite
Quit
TerminalWorking folder
/Volumes/Backup/site-archive
Quit
mdsSpotlight, indexing this disk
By app, not by process number The files, and which are being written
03Eject

Quit what holds it and eject, in one step.

Quit Them and Eject names the apps it will quit and asks. It quits them the way ⌘Q does, then ejects the disk. An app can still ask you to save, and if one does not quit, Vitals says which.

  • Names what it will quit, and asks first
  • Apps quit as ⌘Q does, so they can ask to save
  • Tries again while macOS lets go
  • Says when the disk is safe to unplug
Backup Is in Use
Quit Them and Eject quits Photos and Terminal, then ejects the disk. An app may ask you to save first.
Quit Them and EjectCancel
Backup was ejected. You can unplug it.
Named before anything quits As ⌘Q and Finder do it
04Find a file

Type a file name and see who has it open.

The filter searches every open file on every disk. Type part of a name or a path and the apps holding a match are listed. It is also how to find what has a file open when the Trash says the item is in use.

  • Search by file name or path
  • Across every disk at once
  • The app, and the process inside it
  • Ask an assistant, or vitals files in the terminal
report-q3⌘F
Preview
~/Documents/report-q3.pdf
Macintosh HD
Mail
~/Library/Mail/…/report-q3.pdf
Macintosh HD
Terminal
/Volumes/Backup/report-q3
Backup
Any part of the name or path Who has it open, on any disk
Why it matters

Open files, before and after

A disk that will not eject is one of the Mac's oldest annoyances. Finder says one or more programs may be using it and, often, not which. The answer is in Terminal: lsof with the disk's path, a list of process names and numbers, and then a hunt for the app each one belongs to.

So people pull the cable and hope, or click Force Eject and risk the file that was being written.

Open Files, a section of Vitals' Developer tab, lists every disk with the apps and programs holding files on it, by name, with the files. Quit them from there, or let Quit Them and Eject do it and eject the disk once they have gone. Nothing is quit until you say so.

How to use it

Where it is in Vitals

The tab, the menu bar item and the setting, in the order you would reach for them.

  1. 01

    Open the Developer tab and choose Open Files

    Every connected disk is listed with how many files are open on it and whether it is ready to eject. Vitals picks the first external disk for you.

  2. 02

    See who holds the disk

    Under the disk are the apps and programs with something open on it. Open one to see its files, and how many are open for writing.

  3. 03

    Quit them and eject

    Click Eject on a disk that is in use and Vitals names what it will quit. Say yes and it quits them, ejects the disk and tells you it is safe to unplug.

  4. 04

    Find one file

    Press ⌘F and type part of a file's name or path. Whatever has it open is listed, on any disk.

Compared

Open files: Activity Monitor and Vitals

The whole comparison is row by row. These are the rows about open files.

Activity Monitor Vitals
Open files
Activity MonitorPer process, behind a double-click
VitalsBy disk and by app
What stops an eject
Activity MonitorNot shown; lsof in Terminal
VitalsNamed, with the files it holds
Ejecting
Activity MonitorFinder, or Force Eject
VitalsQuit Them and Eject, after a confirmation
Finding a file
Activity MonitorNo search across processes
VitalsFilter every open file by name or path
macOS processes
Activity MonitorShown by name only
VitalsSpotlight and Time Machine, said in plain words

The words behind it

What the numbers mean, from the Activity Monitor glossary.

Questions

The ones people ask about open files before they buy.

Why can't I eject my external drive?

Something still has a file or a folder open on it: an app with a document, a Terminal tab working in one of its folders, or macOS indexing it or backing up to it. Open Files names each one, with the files it holds.

How do I see which app is using a file?

Open the Developer tab, choose Open Files, press ⌘F and type part of the file's name or path. Every app holding a file that matches is listed, on whichever disk it is.

Does Vitals force eject a disk?

No. It quits the apps you agree to quit, the way ⌘Q does, so an app can ask you to save first, then ejects the disk as Finder does. If something will not let go, Vitals says what it is.

What about Spotlight and Time Machine?

They are named for what they are doing: Spotlight indexing the disk, Time Machine backing up to it. macOS's own processes usually let go within a few seconds, and Vitals tries again while they do.

Why are some of macOS's processes left out?

Without Full System Metrics, Vitals cannot read the files of the processes macOS runs itself, such as Spotlight's, and says how many it left out. Turn it on in Settings → Permissions and they are listed too.

Does it show files on the startup disk too?

Yes. Every disk is listed, the startup disk included. Open an app under it to see its files, and how many are open for writing.

Can my assistant or a script ask?

Yes. Over MCP an assistant can ask what is holding a disk or a file, and vitals files answers the same in the terminal.

Is it the same as lsof?

It reads what lsof reads, every process's open files, and groups them by disk and by app, with helper processes counted under the app they belong to.

Read on

Guides that use this, and how Vitals compares with the apps people buy for it.

More of Vitals

All features

Lifetime for $29 while the launch price lasts

Then $49, or $15 for a year of updates. One payment, 14-day refund.

Get Vitals for $29