Kick
See what holds your disk. Then eject it safely.
"The disk wasn't ejected because one or more programs may be using it."
macOS says this and stops. Kick keeps asking: which app, which file, which folder.
Then one button asks those apps to quit, checks the disk again, and ejects it.
No force unmount, no instant kill. Free and open source.
macOS 14+ · Apple Silicon and Intel · Developer ID signed + notarized · MIT license · Türkçe
It names the cause
Not "a program", but which program, which file, which folder. App name and icon,
the app that started it ("Started from Terminal"), PID, and the open paths. APFS and exFAT
volumes on the same drive show as one disk.
It asks politely
Safely Kick asks normal Mac apps to quit, and only when they read from the disk.
It is the same as Quit in the app menu. The app can still show its save dialog. Then Kick
checks the disk again and ejects it when it is clear.
Clear, not forceful
Writers, backups, sync tools, virtual machines, terminals, and macOS processes are never
touched on their own. Kick tells you the step to take. For a stubborn one there is
Stop: you choose, you confirm, Kick sends one polite stop request.
Free, open, honest
MIT license. No ads, no account, no "Pro". Developer ID signed and notarized by Apple.
What it does is below and in the source code.
How it works
Kick first sends the normal macOS eject command, the same as the ⏏ button in Finder.
A clean disk ejects right away. When macOS returns a "busy" error, Kick runs lsof
and finds every process with an open file or current folder on that disk. It matches each one
with its app name, the app that started it, its PID, and its start time.
Safely Kick sends a normal quit request only to eligible apps, waits a few seconds,
scans the disk again, and retries the eject only when nothing remains. Before each eject it
checks the physical identity of the disk again (IOKit registry entry, media and volume UUIDs,
mount paths). A different disk at the same path is never ejected by mistake.
Stop is a separate button and the last stage. You pick one process, Kick shows what
will happen and any risk, and you confirm. Kick takes a fresh snapshot, confirms that the same
process still holds the disk, and sends one request: a normal quit for an app, or one
SIGTERM for a command-line tool. If the process ignores it, the disk stays mounted
and Kick shows what is still open.
Details: README — How it works