launchd on Mac: what it is and why it uses CPU
launchd is the first process macOS starts and the parent of every other one. The kernel launches it as process ID 1, and from then on it starts system daemons, your login agents and the apps you open, restarts the ones that should always run, and runs scheduled jobs. It is idle almost all the time. When it shows CPU, a process it supervises is usually crashing and being restarted in a loop, and launchd is paying for each restart. It cannot be quit: ending launchd would end the Mac.
- Verdict
- Leave it. Activity Monitor will not quit it, and nothing good would follow if it did.
- Normal CPU
- 0 percent, brief bumps when apps start or a daemon restarts
- Normal memory
- Under 30 MB
- Common cause
- A daemon or agent crashing and relaunching repeatedly
- Process ID
- Always 1. Two rows in Activity Monitor: one for the system, one for your login
What launchd does
When a Mac boots, the kernel loads and then starts exactly one program: launchd. Everything else, from the Wi-Fi daemon to the Dock to the app you are reading this in, is started by launchd or by something launchd started. It replaced the older init, cron and other startup systems in one process, and it has three jobs. First, it starts daemons (system services that run as root, before anyone logs in) and agents (services that run as you, after you log in), each described by a small property list file. Second, it supervises them: if a service that is marked keep-alive dies, launchd starts it again, which is why quitting bluetoothd or coreaudiod brings them straight back. Third, it runs jobs on a schedule or in response to events such as a file appearing in a folder or a network port being contacted.
The property lists live in a few fixed places: Apple's own in /System/Library/LaunchDaemons and /System/Library/LaunchAgents, third-party ones in /Library/LaunchDaemons and /Library/LaunchAgents, and your personal agents in ~/Library/LaunchAgents. System Settings, Login Items & Extensions shows the third-party ones in plain language as background items.
What normal looks like
Why launchd is using CPU right now
- A daemon or agent is in a crash loop. This is the cause nine times out of ten. A service marked keep-alive dies on launch, launchd restarts it, it dies again. launchd throttles these restarts to about one every ten seconds by default, but a service that exits instantly still costs a start each time, and the Console Crash Reports list fills up with the same name. Third-party helpers from uninstalled apps are the usual offenders: the app is gone, its helper is still registered.
- You just booted or logged in. Starting everything at once is launchd's busiest moment. A minute of elevated CPU is normal.
- A scheduled job that fires too often. Some background items run on a short interval. Each run is a start. If the job is misconfigured to run every few seconds, launchd shows it.
- A folder watcher or socket that is being hit constantly. launchd can start a job when a file lands in a folder or a port is contacted. A flood of either keeps it busy.
- Memory pressure. When the Mac is very low on memory, processes get terminated and restarted more often than usual, and launchd is doing the restarting. The real problem is the memory; see the memory pressure guide.
Is it safe to quit launchd?
It cannot be quit, and that is by design. launchd is process 1, the parent of every other process. Activity Monitor refuses to end it, Terminal refuses even with administrator rights, and if it could be killed the kernel would treat that as a system failure and stop the Mac. There is also nothing to gain: launchd has no state worth resetting that a restart does not reset anyway. Every troubleshooting step for a busy launchd is about finding the child process that keeps dying.
Type the name of any process you suspect above. If the answer says it restarts itself when quit, that is launchd's keep-alive at work, and quitting it will not help; finding out why it crashes will.
What to do, in order
- Find the process that keeps dying
Open Console (in Applications, Utilities) and click Crash Reports in the sidebar. Sort by date. A name that appears every few seconds or minutes is your crash loop. Note it.
- Match it to an app
Most crashing helpers carry the name of their app or developer. System Settings, General, Login Items & Extensions lists background items by app. Switch off the one that matches. If the app is already uninstalled, switch off its leftover item.
- Update or reinstall that app
A helper that crashes on launch is often one that no longer matches the current macOS. Updating the app usually replaces the helper with one that works. Reinstalling does the same if there is no update.
- Remove the app properly if you no longer want it
Use the app's own uninstaller if it has one, since that removes its background items. Dragging an app to the Trash can leave the helper registered, which is exactly what makes launchd busy later.
- Check memory pressure
Activity Monitor, Memory tab, the Memory Pressure graph. If it is yellow or red, processes are being killed and restarted because the Mac is out of memory. Close apps or restart; launchd will calm down with them.
- Restart the Mac
A restart gives launchd a clean start of everything. If the loop returns within minutes, you have confirmed it is a specific background item, and steps one and two will find it.
When to worry
Worry when launchd stays above 20 percent with no crash reports, memory pressure green, and a fresh restart behind you. That is very rare, and the next step is to look at the third-party items under Login Items & Extensions one by one, switching each off for a few minutes. Worry if you see a background item you cannot identify at all, with a name that does not match any app you have installed: that is worth a look in the Finder (Go to Folder, the Library LaunchAgents and LaunchDaemons paths above) to see which developer signed it. Do not worry about the boot burst or a few percent when apps start. Do not edit or delete anything in the System folder; it is read-only for good reason, and launchd needs it as it is.
Safe to Quit, the Mac app this site comes from, shows the plain-English role of launchd and of every process it starts, so you can tell the manager from the thing that is misbehaving.
- 1launchd busy
- 2Just booted? Wait a minute
- 3Still busy? Console, Crash Reports: which name repeats?
- 4Switch off that background item
- 5Still busy with no crashes? Check memory pressure, then restart
Watch: daemons, agents and where their files live
What are launchd agents and daemons on macOS? by Victor on Software. Ten minutes, independent, aimed at people who want to see the property list folders and launchctl for themselves. Not needed for the fix order above.
Questions people ask
What is launchd on a Mac?
It is the first process macOS starts, process ID 1, and the one that starts and supervises every other process: system daemons before login, your agents after login, the apps you open and scheduled background jobs. It replaced the older init and cron systems. It runs on every Mac and cannot be stopped without stopping the Mac.
Can I delete LaunchDaemons on a Mac?
Never from /System/Library; that folder is read-only and belongs to macOS. Third-party ones in /Library/LaunchDaemons and /Library/LaunchAgents can be removed, but the safe way is System Settings, General, Login Items & Extensions, where you can switch a background item off without touching files. Use an app's own uninstaller to remove its items cleanly.
How do I get rid of a daemon on a Mac?
Find which app it belongs to (the name usually gives it away, and Login Items & Extensions groups items by app), then either switch it off there or uninstall the app with its own uninstaller. If the app is gone and the item remains, switching it off under Login Items is enough; launchd will stop starting it.
How do I find out what processes are running on my Mac?
Open Activity Monitor from Applications, Utilities. The CPU tab lists every running process with its CPU use; choose View, All Processes to include system ones. Selecting a process and pressing Command-I shows its path and parent, which for most processes is launchd. Our Activity Monitor guide walks through the columns.
Why are there two launchd rows in Activity Monitor?
One is the system launchd, process 1, running as root. The other runs as you and manages your login agents and the apps you open. Both are normal and both are part of the same system; the second simply handles the per-user half of the job. Neither can be quit.
Sources and further reading
- Apple Support: Script management with launchd in Terminal on Mac Apple's own description of daemons, agents and where their files live.
- launchd.info The long-standing reference for launchd property lists and behavior, including keep-alive and throttling.
- launchd.plist man page The KeepAlive and ThrottleInterval keys that explain crash-loop behavior.
- Apple Support: Change Login Items & Extensions settings on Mac The safe place to switch background items off.