[[:mac|{{ :Apple.png?40|}}]]
===== Der launchd Prozess (PID 1) =====
In Mac OS 10.4 (Tiger) stellte Apple ein neues System Startup Programm namens launchd((http://de.wikipedia.org/wiki/Launchd))((http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man8/launchd.8.html)) vor. Der launchd Daemon übernimmt viele Aufgaben von cron, xinetd, mach_init und init, was tradionelle UNIX Programme sind, die die System Initialisierung managen. Sie führen Startskripte aus, laden StartupItems und bereiten uA das System für den User Login vor. init war lange Zeit der erste Prozess auf einem UNIX System und dieser wurde auf den unterschiedlichen UNIX Derivaten unterschiedlich weiterentwickelt. In BSD Systemen führte init die Startskripte aus, startete getty((http://en.wikipedia.org/wiki/Getty_%28Unix%29)) wann immer dies notwendig war und spürte verwaiste Prozesse auf. In Linux und System V Systemen (zB Solaris) wurden Runlevel von init gemanaget, Dienste (aka Daemons) bei Bedarf gestoppt und gestartet usw. Wie bei den anderen Weiterentwicklungen von init wie zB xinetd, ist die entscheidende Idee bei launchd die Daemons erst dann zu laden, wenn sie benötigt werden, was einen spürbaren Performancegewinn mit sich bringt, da dadurch nicht unnötig Systemresourcen verschwendet werden, für Dienste die nur sporadisch gebraucht werden. Das beinhaltet auch das Überwachen der Netzwerkschnittstelle nach eingehenden Anforderungen und dem anschließenden Starten des dazugehörigen Deamon. launchd ist der erste Prozess der vom Darwin Kernel gestartet wird (PID 1) und ist somit die Mutter aller Prozesse in Mac OS (Parent Prozess = PPID).
$ ps -eaf
~~ snip ~~
UID PID **PPID** C STIME TTY TIME CMD
0 **1** 0 0 0:00.89 ?? 0:00.94 /sbin/launchd
0 11 **1** 0 0:00.83 ?? 0:01.02 /usr/libexec/kextd
0 12 1 0 0:00.31 ?? 0:00.65 /usr/sbin/DirectoryService
~~ snap ~~
launchd hat zwei Hauptaufgaben: erstens das System zu starten (booten) und zweitens die Dienste zu laden und zu überwachen dh sicherzustellen, dass sie noch laufen und sich nicht ungeplant beendet haben. Die Start-Optionen bzw. Start-Parameter eines Dienstes werden in plist-basierten Konfigurationsdateien abgelegt und beim Systemstart von launchd ausgewertet. Dazu sucht launchd in /etc/rc (sofern vorhanden) und den User bzw System LaunchdAgent- und LaunchdDaemons-Verzeichnissen((http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html)). Wird zB in der plist-Datei über den Schlüssel OnDemand als Startart angegeben, wird der Daemon zu diesem Zeitpunkt tatsächlich noch nicht gestartet. Stattdessen reserviert launchd zB alle Netzwerkports die ein on-demand Netzwerk Service für sich beansprucht. Andererseits kann mit der Option RunAtLoad ein Dienst schon beim Systemstart geladen werden.
~/Library/LaunchAgents -> Per-user agents provided by the user.
/Library/LaunchAgents -> Per-user agents provided by the administrator.
/Library/LaunchDaemons -> System-wide daemons provided by the administrator.
/System/Library/LaunchAgents -> Per-user agents provided by Mac OS X.
/System/Library/LaunchDaemons -> System-wide daemons provided by Mac OS X.
Ein launchd-Startskript kann aber auch für alle anderen Prozesse verwendet werden, bei denen es sinnvoll oder hilfreich ist, sie beim Systemstart auszuführen. Das können auch nur ganz kleine Skripte sein.
**Note:** Für weitere Information bzgl. der launchd-Startskripte lesen Sie bitte weiter im Artikel [[:mac:start_script|-> Das launchd Startskript]]
**Verwandte Artikel:**
[[:mac:start_script|-> Das launchd Startskript]]
[[:mac:schedule|-> Scheduled Tasks via launchd]]
[[:mac:boot|-> Mac OS Startsequenz 10.6]]
--- //pronto 2010/05/16 21:20//
{{keywords>launchd LaunchAgents LaunchDaemons Mac OSX}}