launchctl

manages launchd services on macOS

TLDR

List loaded services
$ launchctl list
Load service
$ launchctl load [/path/to/service.plist]
Unload service
$ launchctl unload [/path/to/service.plist]
Start service
$ launchctl start [com.example.service]
Stop service
$ launchctl stop [com.example.service]
Bootstrap service (modern replacement for load)
$ sudo launchctl bootstrap gui/[uid] [/path/to/service.plist]
Bootout service (modern replacement for unload)
$ sudo launchctl bootout gui/[uid]/[com.example.service]
Print service info
$ launchctl print gui/[uid]/[com.example.service]

SYNOPSIS

launchctl subcommand [options]

DESCRIPTION

launchctl manages launchd services on macOS. It controls system and user daemons, handling service lifecycle, scheduling, and resource limits.The tool replaces traditional init scripts on macOS, using property list (plist) files to define services.

PARAMETERS

list

List loaded services.
load plist
Load service (deprecated).
unload plist
Unload service (deprecated).
start label
Start service.
stop label
Stop service.
bootstrap domain plist
Load service (modern).
bootout domain plist
Unload service (modern).
print target
Print service info.
kickstart target
Force start service.
enable service
Enable service.
disable service
Disable service.
blame target
Print reason for service being loaded/started.
dumpstate
Dump launchd state to stdout.

CAVEATS

macOS only. The load/unload subcommands are deprecated since macOS 10.10; use bootstrap/bootout instead. System services require root. GUI services use the user domain (gui/UID).

HISTORY

launchctl is part of launchd, introduced in Mac OS X 10.4 Tiger (2005) by Apple. It replaced the traditional init, xinetd, and cron systems, unifying daemon management. Dave Zarzycki led its development.

SEE ALSO

systemctl(1)