Google
 
   
Login
Username:

Password:


Lost Password?

Register now!
Search
Main Menu
top books
Polls
What do you think about php-deluxe.net?
Excellent!
Cool
Hmm..not bad
What the hell is this?
encyclopedia
recommendation
compare webbrowser
Freenet DSL
Who's Online
3 user(s) are online (3 user(s) are browsing encyclopedia)

Members: 0
Guests: 3

more...
browser tip
Unix Befehle
manual of unix befehle
recommendation!
Sponsored
partner

Launchd

Developed by Dave Zarzycki at Apple Computer, launchd is a unified framework for starting, stopping and managing daemon (computer software) and other programs. It is essentially a replacement for Init, Unix_security, the init.d and rc.d scripts, SystemStarter, inetd and xinetd, atd, crond, and watchdog. It is Apple s stated intention that they want to eliminate all of the aformentioned services in favor of launchd at some point in the future. As of OS X 10.4 Apple has moved most of processes handled by the previously mentioned deamons to launchd. By consolidating all the launch services into one program, launchd significantly shortens boot time on slow computers.

Launchd is open source software, being licensed under the Apple Public Source License v2. It was first released as part of Mac OS X v10.4/Darwin (operating system) v8.0.

=launchd Components=

There are two main programs in the launchd system, launchd, launchctl, and the plist configuration files.

launchd manages the daemons at both a system and user level. Similar to xinetd, launchd can start daemons on demand. Similar to watchdogd, launchd can monitor daemons to make sure that they keep running. launchd also has replaced init as PID 1 on Mac OS X and as a result it is responsible for starting the system at boot time.

launchctl is a command line application used to load and unload daemons, start and stop launchd controlled jobs, get system utilization statistics for launchd and its child processes, and set environment settings.

Plists define the services to be loaded into launchd with launchctl. Stored in the LaunchAgents and LaunchDaemons subdirectories of the Library folders, the XML files have around thirty different keys that can be set.

==launchd==

launchd has two main tasks. The first is to boot the system, and the second is to load and maintain services. Let s take a look at the boot part of the job first.

Here is a very simplified view of the 10.4 system startup:

# The BootROM activates, does its thing to the hardware, and then loads BootX. # BootX loads the kernel, spins the pinwheel cursor, and loads any needed kernel extensions (kexts), and then the kernel loads launchd. # launchd runs /etc/rc, scans through /System/Library/LaunchDaemons and /Library/LaunchDaemons and acts on the plists as needed, and starts the login window.

Step 2 in this startup sequence is a huge change for Mac OS X, and Unix-like operating systems in general. Prior to the introduction of launchd, this step in the startup sequence would have resulted in some flavor of the Init process being loaded as the first process, process identifier (PID) 1. Now, launchd is PID 1.

In step 3, launchd scans through a few different directories for jobs to run. There are two different folders that are scanned. The LaunchDaemons folders contain items that will run as root, generally background processes. The LaunchAgents folders contain jobs, called agent applications, that will run as a user or in the context of userland. These may be scripts or other foreground items, and they can even include a user interface. These directories are all kept in the typical Library folders of Mac OS X.

Launchd is very different from SystemStarter in that it may not actually launch all the daemons at boot time. Key to launchd, and similar to xinitd, is the idea of launch on demand daemons. When launchd scans through the job plists at boot time it reserves and listens on all of the ports requested by those jobs. If so indicated in the plist by the OnDemand key, the daemon is not actually loaded at the time. Rather, launchd will listen on the port, start the daemon when needed, and shut it down when it is not. After a daemon is loaded, launchd will keep track of it and make sure it is running if needed. In this way it is like watchdogd, and shares watchdogd s requirement that processes do not attempt to fork or daemonize on their own. If a process goes into the background launchd will lose track of it and attempt to relaunch it.

Consequently, Mac OS X 10.4 boots much faster than previous releases. The system only has to register the daemons that are to run, not actually launch them. In fact, the progress bar that appears during boot time is just a placebo application (named WaitingForLoginWindow [http://daringfireball.net/misc/2005/04/tiger_details#waitingforloginwindow]) that doesn t really show anything other than the passage of time.

The hardest part to manage during a launchd boot is dependencies. SystemStarter had a very simple system of dependencies that used the Uses , Requires , and Provides keys in the plist of a startup item. There are two main strategies when creating launch dependencies on 10.4. Using IPC will allow the daemons to talk amongst themselves to work it out, or you can watch files or paths for changes. Using IPC is much more subtle than the SystemStarter s keys and requires more work from the developer, but it may lead to cleaner and quicker startups. The SystemStarter is an option that is still supported at this time, but it has been deprecated in Mac OS X 10.4; it may not be available in future OS X versions.

==launchctl==

One of the major complaints with the other facilities for service control is that they are strewn across the OS with no central way to manage them. launchctl is Apple s way of fixing this.

On its own, launchctl can take commands from the command line, from standard in, or operate in interactive mode. A set of commands can be make permanent when stored in ~/.launchd.conf or /etc/launchd.conf. With Sudo, launchctl can be used to make changes on a global scale.

==Plist==

A plist is a type of file that Apple uses for program configuration. When launchd scans a folder, or a job is submitted with launchctl, it reads a plist file that describes how the program is to be run.

At a minimum there are two required launchd.plist keys:

; Label : The name of the job. ; ProgramArguments : Strings to pass to the program when it is executed.

That s all that s required in a plist, but it s not enough to generate a useful job.

A list of oft-used keys follows below. For a full list, see Apple s manpage for [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html launchd.plist].

; UserName : The job will be run as the given user, who may not necessarily be the one who submitted it to launchd. ; inetdCompatibility : Indicates that the daemon expects to be run as if it was launched by inetd. ; Program : The path to your executable. This key can save the ProgramArguments key for flags and arguments. ; OnDemand : A Boolean flag that defines if a job runs continuously or not. ; RootDirectory : The job will be chrooted into another directory. ; ServiceIPC : Whether the daemon can speak IPC to launchd. ; WatchPaths : Allows launchd to start a job based on modifications at a file-system path. ; QueueDirectories : Similar to WatchPath, a queue will only watch an empty directory for new files. ; StartInterval : Used to schedule a job that runs on a repeating schedule. ; StartCalendarInterval : Job scheduling. The syntax is similar to cron. ; HardResourceLimits : Controls restriction of the resources consumed by any job. ; LowPriorityIO : Tells the kernel that this task is of a low priority when doing file system I/O. ; Sockets : An array can be used to specify what socket the daemon will listen on for launch on demand.

=External links=

  • [http://darwinsource.opendarwin.org/10.4/launchd-106/ launchd s source code] at opendarwin.org
  • [http://www.afp548.com/article.phpstory=20050620071558293 An article] explaining launchd in depth and the basis for much of this article.
  • [http://www.macgeekery.com/tips/all_about_launchd_items_and_how_to_make_one_yourself An article] discussion the creation of property lists for launchd
  • [http://www.codepoetry.net/products/launchdeditor Launchd Editor], a shareware editor for creating launchd service property lists
  • ==Online Unix Manual References==

  • [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/launchd.8.html|man launchd]
  • [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/launchd.conf.5.html|man launchd.conf]
  • [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html#//apple_ref/doc/man/5/launchd.plist|man launchd.plist]
  • [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html#//apple_ref/doc/man/1/launchctl|man launchctl]
  • [http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/launchd_debugd.8.html|man launchd_debugd]