Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
launchctl(1)		    General Commands Manual		  launchctl(1)

NAME
       launchctl -- Interfaces with launchd

SYNOPSIS
       launchctl subcommand [arguments ...]

DESCRIPTION
       launchctl interfaces with launchd to manage and inspect daemons,	agents
       and XPC services.

SUBCOMMANDS
       launchctl allows	for detailed examination of launchd's data structures.
       The  fundamental	structures are domains,	services, and endpoints. A do-
       main manages the	execution policy for a collection of services.	A ser-
       vice may	be thought of as a virtual process that	is always available to
       be spawned in response to demand. Each service has a collection of end-
       points, and sending a message to	one of those endpoints will cause  the
       service	to  launch  on	demand.	Domains	advertise these	endpoints in a
       shared namespace	and may	be thought of as synonymous  with  Mach	 boot-
       strap subsets.

       Many subcommands	in launchctl take a specifier which indicates the tar-
       get  domain  or service for the subcommand. This	specifier may take one
       of the following	forms:

       system/[service-name]
		Targets	the system domain or a service within the  system  do-
		main. The system domain	manages	the root Mach bootstrap	and is
		considered  a privileged execution context. Anyone may read or
		query the system domain, but root privileges are  required  to
		make modifications.

       user/<uid>/[service-name]
		Targets	 the user domain for the given UID or a	service	within
		that domain. A	user  domain  may  exist  independently	 of  a
		logged-in user.	User domains do	not exist on iOS.

       login/<asid>/[service-name]
		Targets	 a  user-login domain or service within	that domain. A
		user-login domain is created when the user logs	in at the  GUI
		and  is	 identified by the audit session identifier associated
		with that login. If a user domain has an associated login  do-
		main, the print	subcommand will	display	the ASID of that login
		domain.	User-login domains do not exist	on iOS.

       gui/<uid>/[service-name]
		Another	 form of the login specifier. Rather than specifying a
		user-login domain by its ASID, this specifier targets the  do-
		main  based  on	which user it is associated with and is	gener-
		ally more convenient.

		Note: GUI domains and user domains share many  resources.  For
		the  purposes  of  the	Mach  bootstrap	name lookups, they are
		"flat",	so they	share the same set of  registered  names.  But
		they  still  have  discrete sets of services. So when printing
		the user domain's contents, you	may see	 many  Mach  bootstrap
		name  registrations from services that exist in	the GUI	domain
		for that user, but you will not	see the	services themselves in
		that list.

       pid/<pid>/[service-name]
		Targets	the domain for the given PID or	a service within  that
		domain.	 Each process on the system will have a	PID domain as-
		sociated with it that consists of the XPC services visible  to
		that	 process     which     can     be     reached	  with
		xpc_connection_create(3).

       For  instance,  when  referring	to  a  service	with  the   identifier
       com.apple.example  loaded  into	the GUI	domain of a user with UID 501,
       domain-target  is  gui/501/,  service-name  is  com.apple.example,  and
       service-target is gui/501/com.apple.example.

SUBCOMMANDS
       bootstrap  |  bootout  domain-target [service-path service-path2	...] |
		service-target
		Bootstraps or removes domains and services. When service argu-
		ments are  present,  bootstraps	 and  correspondingly  removes
		their  definitions into	the domain.  Services may be specified
		as a series of paths or	a service identifier.  Paths may point
		to XPC service bundles,	launchd.plist(5) s, or	a  directories
		containing  a  collection of either. If	there were one or more
		errors while bootstrapping or removing a  collection  of  ser-
		vices,	the  problematic paths will be printed with the	errors
		that occurred.

		If no paths or service target are  specified,  these  commands
		can  either bootstrap or remove	a domain specified as a	domain
		target.	Some domains  will  implicitly	bootstrap  pre-defined
		paths as part of their creation.

       enable |	disable	service-target
		Enables	 or disables the service in the	requested domain. Once
		a service is disabled, it cannot be loaded  in	the  specified
		domain	until  it  is  once again enabled. This	state persists
		across boots of	the device. This subcommand  may  only	target
		services  within  the system domain or user and	user-login do-
		mains.

       kickstart [-kp] service-target
		Instructs launchd to run the  specified	 service  immediately,
		regardless of its configured launch conditions.

		-k	 If  the  service is already running, kill the running
			 instance before restarting the	service.

		-p	 Upon success, print the PID of	the new	process	or the
			 already-running process to stdout.

       attach [-ksx] service-target
		Attaches the system's debugger to the process currently	 back-
		ing  the  specified service. By	default, if the	service	is not
		running, this subcommand will block until the service starts.

		-k	 If the	service	is already running, kill  the  running
			 instance.

		-s	 Force the service to start.

		-x	 Attach	to xpcproxy(3) before it execs and becomes the
			 service  process.  This  flag is generally not	useful
			 for anyone but	the launchd maintainer.

       debug  service-target  [--program  <program   path>]   [--guard-malloc]
		[--malloc-stack-logging]		   [--debug-libraries]
		[--introspection-libraries]  [--NSZombie]   [--32]   [--stdin]
		[--stdout]  [--stderr] [--environment] [--] [argv0 argv1 argv2
		...]
		Configures the next invocation of  a  service  for  debugging.
		This subcommand	allows you to temporarily replace the main ex-
		ecutable  of  the service with one at a	different path,	enable
		libgmalloc(3), set environment	variables,  set	 the  argument
		vector	and  more. This	is a convenient	alternative to editing
		the launchd.plist(5) for the service and then reloading	it, as
		the additional debugging properties are	cleared	once the  ser-
		vice has run once with them.

		--program <program-path>
			 Instructs  launchd(8)	to  use	 program-path  as  the
			 service's executable.

		--guard-malloc
			 Turns on libgmalloc(3)	for the	service.

		--malloc-stack-logging
			 Turns on malloc(3) stack logging for the service.

		--malloc-nano-allocator
			 Turns on the malloc(3)	nano allocator	for  the  ser-
			 vice.

		--debug-libraries
			 Sets  the  DYLD_IMAGE_SUFFIX for the service to "_de-
			 bug", which prefers the debug variants	 of  libraries
			 if they exist.	See dyld(1) for	more information.

		--introspection-libraries
			 Adds	  /usr/lib/system/introspection	    to	   the
			 DYLD_LIBRARY_PATH environment variable	for  the  ser-
			 vice. This causes the system to prefer	the introspec-
			 tion variants of libraries if they exist.

		--NSZombie
			 Enables NSZombie.

		--32	 Runs  the service in the appropriate 32-bit architec-
			 ture. Only available on 64-bit	platforms.

		--stdin	[stdin-path]
			 Sets the service's standard input to  be  stdin-path.
			 If no file is given, uses the current terminal	as the
			 service's  standard input. If stdin-path does not ex-
			 ist, it is created.

		--stdout [stdout-path]
			 Sets the service's standard output to be stdout-path.
			 If no file is given, uses the current terminal	as the
			 service's standard output. If	stdout-path  does  not
			 exist,	it is created.

		--stderr [stderr-path]
			 Sets  the service's standard error to be stderr-path.
			 If no file is given, uses the current terminal	as the
			 service's standard error. If stderr-path does not ex-
			 ist, it is created.

		--environment VARIABLE0=value VARIABLE1=value ...
			 Sets the given	environment variables on the service.

		-- argv0 argv1 ...
			 Any arguments following the --	are given to the  ser-
			 vice as its argument vector.

			 IMPORTANT:  These arguments replace the service's de-
			 fault argument	vector;	they are  not  merged  in  any
			 way.  The first argument following -- is given	as the
			 initial (zeroth) element of  the  service's  argument
			 vector. As with the ProgramArguments launchd.plist(5)
			 key,  you  should  read  carefully and	understand the
			 execve(2) man page.

       kill signal-name	| signal-number	service-target
		Sends the specified signal to the specified service if	it  is
		running.  The  signal  number or name (SIGTERM,	SIGKILL, etc.)
		may be specified.

       blame service-target
		If the service is running, prints a human-readable string  de-
		scribing  why launchd launched the service. Note that services
		may run	for many reasons; this subcommand will only  show  the
		most  proximate	reason.	So if a	service	was run	due to a timer
		firing,	this subcommand	will print that	 reason,  irrespective
		of  whether there were messages	waiting	on the service's vari-
		ous endpoints. This subcommand is only intended	for  debugging
		and  profiling use and its output should not be	relied upon in
		production scenarios.

       print domain-target | service-target
		Prints information about the specified service or domain.  Do-
		main  output  includes	various	properties about the domain as
		well as	a list of services and endpoints in  the  domain  with
		state  pertaining  to  each.  Service  output includes various
		properties of the service,  including  information  about  its
		origin on-disk,	its current state, execution context, and last
		exit status.

		IMPORTANT:  This output	is NOT API in any sense	at all.	Do NOT
		rely on	the structure or information emitted for  ANY  reason.
		It may change from release to release without warning.

       print-cache
		Prints the contents of the launchd service cache.

       print-disabled domain-target
		Prints the list	of disabled services in	the specified domain.

       plist [segment,section] Mach-O
		Prints	  the	 the	property    list   embedded   in   the
		__TEXT,__info_plist segment/section of the  target  Mach-O  or
		the specified segment/section.

       procinfo	pid
		Prints	information  about the execution context of the	speci-
		fied PID. This information includes  Mach  task-special	 ports
		and  exception	ports  (and  when  run	against	 a DEVELOPMENT
		launchd, what names the	ports are advertised as	 in  the  Mach
		bootstrap  namespace,  if they are known to launchd) and audit
		session	context. This subcommand is  intended  for  diagnostic
		purposes  only,	 and  its  output should not be	relied upon in
		production scenarios. This command requires root privileges.

       hostinfo
		Prints information about the system's host-special ports,  in-
		cluding	the host-exception port. This subcommand requires root
		privileges.

       resolveport owner-pid port-name
		Given a	PID and	the name of a Mach port	right in that process'
		port  namespace,  resolves that	port to	an endpoint name known
		to launchd.  This subcommand requires root privileges.

       examine [tool arg0 arg1 @PID ...]
		Causes launchd to fork(2) itself for examination by a  profil-
		ing  tool  and	prints the PID of this new instance to stdout.
		You are	responsible for	killing	this snapshot when  it	is  no
		longer needed.

		Many  profiling	 tools	cannot	safely examine launchd because
		they depend on the functionality it provides. This  subcommand
		creates	 an effective snapshot of launchd that can be examined
		independently. Note that on Darwin platforms, fork(2)  is  im-
		plemented  such	 that  only the	thread which called fork(2) is
		replicated into	the new	child process, so this	subcommand  is
		not  useful for	examining any thread other than	the main event
		loop.

		This subcommand	takes an optional invocation of	a tool	to  be
		used  on  the  launchd snapshot. Where you would normally give
		the PID	of the process to be examined in  the  tool's  invoca-
		tion,  instead specify the argument "@PID", and	launchctl will
		substitute that	argument with the PID of the launchd  snapshot
		in its subsequent execution of the tool. If used in this form,
		launchctl  will	 automatically kill the	snapshot instance when
		the examination	tool exits.

		This  subcommand  may  only  be	 used  against	a  DEVELOPMENT
		launchd.

       config system | user parameter value
		Sets  persistent  configuration	information for	launchd(8) do-
		mains. Only the	system domain and user domains may be  config-
		ured. The location of the persistent storage is	an implementa-
		tion  detail,  and changes to that storage should only be made
		through	this subcommand. A reboot is required for changes made
		through	this subcommand	to take	effect.

		Supported configuration	parameters are:

		umask	 Sets the umask(2) for services	within the target  do-
			 main to the value specified by	value.	Note that this
			 value	is  parsed  by	strtoul(3) as an octal-encoded
			 number, so there is no	need to	prefix it with a lead-
			 ing '0'.

		path	 Sets the PATH environment variable for	 all  services
			 within	 the  target  domain to	the string value.  The
			 string	value should conform to	 the  format  outlined
			 for  the  PATH	 environment  variable	in environ(7).
			 Note that if a	service	specifies its  own  PATH,  the
			 service-specific   environment	  variable  will  take
			 precedence.

			 NOTE: This facility cannot be used to set general en-
			 vironment variables for all services within  the  do-
			 main. It is intentionally scoped to the PATH environ-
			 ment variable and nothing else	for security reasons.

       reboot [system|userspace|halt|logout|apps]
		Instructs launchd to begin tearing down	userspace. With	no ar-
		gument	given  or with the system argument given, launchd will
		make the reboot(2) system call when userspace  has  been  com-
		pletely	 torn down. With the halt argument given, launchd will
		make the reboot(2) system call when userspace  has  been  com-
		pletely	 torn down and pass the	RB_HALT	flag, halting the sys-
		tem and	not initiating a reboot.

		With the userspace argument given, launchd will	re-exec	itself
		when userspace has been	torn down and bring userspace back up.
		This is	useful for rebooting the system	quickly	 under	condi-
		tions  where kernel data structures or hardware	do not need to
		be re-initialized.

		With the logout	argument given,	launchd	 will  tear  down  the
		caller's  GUI  login  session  in a manner similar to a	logout
		initiated from the Apple menu. The key difference  is  that  a
		logout	initiated  through this	subcommand will	be much	faster
		since it will not give apps a chance to	display	modal  dialogs
		to  block logout indefinitely; therefore there is data corrup-
		tion risk to using this	option.	Only use it when you know  you
		have no	unsaved	data in	your running apps.

		With  the apps argument	given, launchd will terminate all apps
		running	in the caller's	GUI login session that	did  not  come
		from  a	 launchd.plist(5)  on-disk. Apps like Finder, Dock and
		SystemUIServer will be unaffected. Apps	are terminated in  the
		same  manner  as the logout argument, and all the same caveats
		apply.

       error [posix|mach|bootstrap] code
		Prints a human-readable	string of the given  error  code.   By
		default,  launchctl  will  attempt to guess which error	domain
		the code given belongs to. The caller may  optionally  specify
		which  domain  (either posix, mach, or bootstrap) to interpret
		the given code as an error from	that subsystem.

       variant	Prints the launchd variant currently  active  on  the  system.
		Possible variants include RELEASE, DEVELOPMENT and DEBUG.

       version	Prints the launchd version string.

LEGACY SUBCOMMANDS
       Legacy  subcommands  select the target domain based on whether they are
       executed	as root	or not.	When executed as root, they target the	system
       domain.

       load | unload [-wF] [-S sessiontype] [-D	searchpath] paths ...
		Recommended  alternative  subcommands:	bootstrap  | bootout |
		enable | disable

		Load the specified configuration files or directories of  con-
		figuration files.  Jobs	that are not on-demand will be started
		as  soon as possible. All specified jobs will be loaded	before
		any of them are	allowed	to start. Note that per-user  configu-
		ration files (LaunchAgents) must be owned by root (if they are
		located	in /Library/LaunchAgents) or the user loading them (if
		they  are located in $HOME/Library/LaunchAgents).  All system-
		wide daemons (LaunchDaemons) must be owned by root. Configura-
		tion files must	disallow group and  world  writes.  These  re-
		strictions  are	 in  place  for	 security reasons, as allowing
		writability to a launchd  configuration	 file  allows  one  to
		specify	which executable will be launched.

		Note	that   allowing	  non-root   write   access   to   the
		/System/Library/LaunchDaemons directory	WILL render your  sys-
		tem unbootable.

		-w	 Overrides  the	 Disabled  key and sets	it to false or
			 true for the  load  and  unload  subcommands  respec-
			 tively.  In previous versions,	this option would mod-
			 ify the configuration file. Now the state of the Dis-
			 abled key is stored elsewhere on- disk	in a  location
			 that  may  not	be directly manipulated	by any process
			 other than launchd.

		-F	 Force the loading or unloading	of the	plist.	Ignore
			 the Disabled key.

		-S sessiontype
			 Some  jobs  only make sense in	certain	contexts. This
			 flag instructs	launchctl to look for jobs in  a  dif-
			 ferent	 location  when	 using the -D flag, and	allows
			 launchctl to restrict	which  jobs  are  loaded  into
			 which	session	 types.	Sessions are only relevant for
			 per-user launchd contexts. Relevant sessions are Aqua
			 (the default),	 Background  and  LoginWindow.	 Back-
			 ground	 agents	 may  be loaded	independently of a GUI
			 login.	Aqua agents are	loaded only when  a  user  has
			 logged	 in  at	the GUI. LoginWindow agents are	loaded
			 when the LoginWindow UI is displaying	and  currently
			 run as	root.

		-D searchpath
			 Load  or unload all plist(5) files in the search path
			 given.	This option may	be  thought  of	 as  expanding
			 into  many  individual	 paths depending on the	search
			 path given. Valid search paths	include	"system," "lo-
			 cal," and "all." When providing a  session  type,  an
			 additional  search  path  is available	for use	called
			 "user." For example, without a	 session  type	given,
			 "-D  system"  would  load from	or unload all property
			 list files from /System/Library/LaunchDaemons.	  With
			 a   session   type   passed,	it   would  load  from
			 /System/Library/LaunchAgents.	Note that launchctl no
			 longer	respects the network search path.

			 In a previous version of launchd, these search	 paths
			 were called "domains",	hence -D. The word "domain" is
			 now used for a	totally	different concept.

		NOTE:  Due  to	bugs  in the previous implementation and long-
		standing client	expectations around those bugs,	the  load  and
		unload	subcommands  will only return a	non-zero exit code due
		to improper usage.  Otherwise, zero is always returned.

       submit -l label [-p executable] [-o stdout-path]	 [-e  stderr-path]  --
		command	[arg0] [arg1] [...]
		A simple way of	submitting a program to	run without a configu-
		ration	file.  This  mechanism	also tells launchd to keep the
		program	alive in the event of failure.

		-l label
			 What unique label to assign this job to launchd.

		-p program
			 What program to really	execute,  regardless  of  what
			 follows the --	in the submit sub-command.

		-o stdout-path
			 Where to send the stdout of the program.

		-e stderr-path
			 Where to send the stderr of the program.

       remove label
		Remove the job from launchd by label. This subcommand will re-
		turn immediately and not block until the job has been stopped.

       start label
		Start  the  specified  job  by label. The expected use of this
		subcommand is for debugging and	testing	so that	one can	 manu-
		ally kick-start	an on-demand server.

       stop label
		Stop  the  specified  job  by  label.  If  a job is on-demand,
		launchd	may immediately	restart	the job	if launchd  finds  any
		criteria that is satisfied.

       list [-x] [label]
		Recommended alternative	subcommand: print

		With no	arguments, list	all of the jobs	loaded into launchd in
		three columns. The first column	displays the PID of the	job if
		it  is running.	 The second column displays the	last exit sta-
		tus of the job.	If the number in this column is	 negative,  it
		represents  the	 negative of the signal	which stopped the job.
		Thus, "-15" would indicate that	the job	 was  terminated  with
		SIGTERM.   The	third column is	the job's label. If [label] is
		specified, prints information about the	requested job.

		-x	 This flag is no longer	supported.

       setenv key value
		Specify	an environment	variable  to  be  set  on  all	future
		processes launched by launchd in the caller's context.

       unsetenv	key
		Specify	 that  an environment variable no longer be set	on any
		future processes launched by launchd in	the caller's context.

       getenv key
		Print the value	of an environment variable that	launchd	 would
		set for	all processes launched into the	caller's context.

       export	Export	all of the environment variables of launchd for	use in
		a shell	eval statement.

       getrusage self |	children
		Get the	resource utilization statistics	 for  launchd  or  the
		children of launchd.  This subcommand is not implemented.

       limit [cpu | filesize | data | stack | core | rss | memlock | maxproc |
		maxfiles] [both	[soft |	hard]]
		With no	arguments, this	command	prints all the resource	limits
		of  launchd  as	found via getrlimit(2).	 When a	given resource
		is specified, it prints	the limits for that resource.  With  a
		third  argument, it sets both the hard and soft	limits to that
		value. With four arguments, the	third and forth	argument  rep-
		resent	 the   soft   and   hard   limits  respectively.   See
		setrlimit(2).

       shutdown
		Tell launchd to	prepare	for shutdown  by  removing  all	 jobs.
		This subcommand	is not implemented.

       umask [newmask]
		Get  or	 optionally set	the umask(2) of	launchd.  This subcom-
		mand is	not implemented.

       bslist [PID | ..] [-j]
		This subcommand	is not implemented and has been	superseded  by
		the print subcommand, which provides much richer information.

       bsexec PID command [args]
		This  executes	the  given  command in as similar an execution
		context	as possible to the target PID. Adopted attributes  in-
		clude the Mach bootstrap namespace, exception server and secu-
		rity  audit  session.  It does not modify the process' creden-
		tials (UID, GID, etc.) or adopt	any environment	variables from
		the target process. It affects only the	Mach bootstrap context
		and directly-related attributes.

       asuser UID command [args]
		This executes the given	command	in  as	similar	 an  execution
		context	 as  possible  to that of the target user's bootstrap.
		Adopted	attributes include the Mach bootstrap  namespace,  ex-
		ception	 server	and security audit session. It does not	modify
		the process' credentials (UID, GID, etc.) or adopt  any	 user-
		specific environment variables.	It affects only	the Mach boot-
		strap context and directly- related attributes.

       bstree	This  subcommand is not	implemented and	has been superseded by
		the print subcommand, which provides much richer information.

       managerpid
		This prints the	PID of the launchd which manages  the  current
		bootstrap.  In	prior implementations, there could be multiple
		launchd	processes each managing	their own Mach bootstrap  sub-
		sets.  In  the current implementation, all bootstraps are man-
		aged by	one process, so	this subcommand	will always print "1".

       manageruid
		This prints the	UID associated with the	caller's launchd  con-
		text.

       managername
		This  prints the name of the launchd job manager which manages
		the current launchd  context.  See  LimitLoadToSessionType  in
		launchd.plist(5) for more details.

       help	Print out a quick usage	statement.

CAVEATS
       The  output  produced by	the "legacy" subcommands (chiefly list)	should
       match their output on previous OS X releases. However,  the  output  of
       newer  subcommands does not conform to any particular format and	is not
       guaranteed to remain stable across releases.  These  commands  are  in-
       tended  for  use	by human developers and	system administrators, not for
       automation by programs or scripts. Their	output does not	constitute  an
       API  and	 no  promises of forward compatibility are offered to programs
       that attempt to parse it.

DEPRECATED AND REMOVED FUNCTIONALITY
       launchctl no longer has an interactive mode, nor	does  it  accept  com-
       mands from stdin. The /etc/launchd.conf file is no longer consulted for
       subcommands  to	run during early boot time; this functionality was re-
       moved  for  security  considerations.  While  it	 was  documented  that
       $HOME/.launchd.conf  would  be  consulted  prior	to setting up a	user's
       session,	this functionality was never implemented.

       launchd no longer uses Unix domain sockets for  communication,  so  the
       LAUNCHD_SOCKET  environment  variable  is no longer relevant and	is not
       set.

       launchd no longer loads configuration files from	the network

FILES
       ~/Library/LaunchAgents	      Per-user agents provided by the user.
       /Library/LaunchAgents	      Per-user agents provided by the adminis-
				      trator.
       /Library/LaunchDaemons	      System wide daemons provided by the  ad-
				      ministrator.
       /System/Library/LaunchAgents   OS X Per-user agents.
       /System/Library/LaunchDaemons  OS X System wide daemons.

EXIT STATUS
       launchctl  will	exit with status 0 if the subcommand succeeded.	Other-
       wise, it	will exit with an error	code that can be given	to  the	 error
       subcommand to be	decoded	into human-readable form.

SEE ALSO
       launchd.plist(5), launchd(8), audit(8), setaudit_addr(2)

Darwin				1 October, 2014			  launchctl(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=launchctl&sektion=1&manpath=macOS+26.4>

home | help