What Is Keeping Your Mac Awake? Here's How to Find Out

Your Mac's fans are spinning and the screen never dims — something is holding a wake assertion and macOS will not sleep until it lets go. Finding the cause takes less than two minutes, once you know where to look. This guide walks through Activity Monitor's Energy tab and the Terminal command that shows every active power lock on the system.
How macOS power assertions work
macOS does not sleep on a countdown timer alone. Before dimming the display or spinning down the disk, the kernel checks whether any running process holds a power assertion — a programmatic request filed through the IOKit power management framework that says the machine needs to stay awake. macOS honors that request until the process releases it or the process terminates.
Two assertion types control most sleep behavior. PreventUserIdleSystemSleep blocks the Mac from sleeping entirely — disk, display, everything. PreventUserIdleDisplaySleep keeps the screen lit but lets the rest of the system sleep if it chooses. A download manager, a video player, caffeinate run from Terminal, or a tool like LidRun can hold either type, for different reasons.
Assertions are not a bug; they are a designed feature. The same mechanism that keeps the machine awake during an overnight AI run is the same one a forgotten browser tab uses to hold your Mac awake after you stopped watching a video. The goal is to know which assertions you asked for and which ones showed up uninvited.
Using Activity Monitor to find the cause
Open Activity Monitor from Applications → Utilities, or search with Spotlight. Click the Energy tab. The column labeled Preventing Sleep shows Yes or No for every process the system is tracking — sort by it to push active assertions to the top.
Common surprises in that list: a browser tab playing paused video, a cloud sync client mid-upload, a podcast app, or a video conferencing tool that kept its session open after you left the call. Right-click any suspicious entry and choose Inspect Process to see the full binary path and its parent process — that usually makes the culprit obvious.
Activity Monitor is a good first pass, but it has limits. CLI tools and background daemons — including caffeinate launched from Terminal — may appear under a generic process name or not show up at all. For those, the Terminal command below gives a more complete picture.
Related guideKeep your Mac awake only while it's actually workingReading pmset -g assertions in Terminal
Open Terminal and run pmset -g assertions. The output lists every active power assertion on the system: the assertion type, the human-readable name the app gave it, and the process ID that filed it. The summary block at the top groups them into Listed (currently active) and Timed Out (timer fired but the app has not called release yet).
A timed-out assertion can still block sleep — the process filed it, the clock ran out, but the lock was never released. If you see a PID in the output that looks unfamiliar, cross-reference it with ps aux | grep followed by the PID number to confirm the process name.
To stop a CLI assertion such as caffeinate, find its PID in the pmset output and run kill followed by that PID in Terminal. For app-based assertions, quitting the app releases them immediately. If the assertion shows no clear owner or the process has already crashed, a reboot clears all outstanding locks.
Some assertions carry an explicit timeout; others are indefinite. An indefinite PreventUserIdleSystemSleep held by a frozen or crashed background agent keeps the Mac awake with no visible cause. If your machine has been awake for an unexpectedly long stretch, this is the first thing worth checking.
Intentional vs unwanted wake assertions
Not every assertion needs to be removed. If you are running a long Claude Code session, a local model job, or a Cursor agent overnight, something should be holding that assertion — stopping it would kill your work. The right question is not just 'why is my Mac awake?' but 'did I ask for this?'
A download manager holding sleep prevention until a transfer finishes is doing the right thing. A video player holding it after you closed the window is not. A tool you explicitly configured — LidRun, caffeinate -i run by hand — is intentional. A browser tab with a paused video you forgot about is not. The distinction is consent, not the mechanism.
For intentional long-running holds, guardrails matter: auto-stop on low battery, thermal threshold awareness, and scoping the assertion to a specific process so it releases automatically when the work is done. LidRun's process-watch mode handles this — it holds the assertion only while a named process is running, then releases without you having to remember to stop it. That pattern is covered in detail on the auto-keep-awake-only-while-working guide.
When the culprit is unwanted, quitting the app fixes it immediately. If the same process keeps reappearing after a restart, check System Settings → General → Login Items and Background Items for agents set to launch automatically. Removing or disabling the login item stops the cycle at the source.
A feature of the safe AI workload layer for Mac.
LidRun keeps your work running with the lid closed, with battery and thermal safety built in.
Frequently asked
Open Terminal and run pmset -g assertions. The output lists every active power assertion, the app that filed it, and the assertion type. For a visual approach, open Activity Monitor, click the Energy tab, and sort by the Preventing Sleep column to see which processes are holding a wake lock.
Each line shows an assertion type such as PreventUserIdleSystemSleep, the name the app gave it, and a process ID. The summary block at the top separates active assertions (Listed) from ones whose timer has fired but whose lock was not released (Timed Out). Both groups can block sleep, and the PID lets you trace each one back to its source process.
Yes. macOS and many third-party download managers file a PreventUserIdleSystemSleep assertion while a transfer is in progress so the Mac does not sleep and interrupt the file. Once the download completes, the assertion is released and normal sleep behavior resumes.
Quitting the app releases its assertions immediately. For a CLI process like caffeinate, find its PID in pmset -g assertions output and run kill followed by that PID in Terminal. For a system daemon or background agent, check Login Items in System Settings → General and disable or remove the item so it stops relaunching.