Ich habe festgestellt, dass der launchd
Prozess mehrere Instanzen in der Prozessliste hat. Interessant ist, dass es vier Benutzer gibt, unter denen diese launchd
Prozesse ausgeführt werden:
Wie in den Dokumenten von Apple ( Creating Launch Daemons and Agents ) beschrieben, launchd
wird pro Benutzer gestartet. Aber warum sind die Benutzer, die launchd
wie _spotlight
und erfordern _windowserver
. Ich würde nur root
und erwarten <current_user[i.e. me]>
. Warum benötigen beide Benutzer ( _spotlight
und _windowserver
) den launchd? Ich würde mich über Verweise auf Apple-Dokumente oder andere Ressourcen freuen.
Die Prozess -Eltern-Kind -Beziehungen sind wie folgt:
kernel_task(0,root) -> launchd(1,root) -> launchd(130, _windowserver)
-> launchd(150, <current_user[i.e. me]>)
-> launchd(470, _spotlight)
Die klare Antwort ist, dass Sie durch die Trennung von Prozessen in Benutzer die Berechtigungen trennen, die jeder Prozess erbt. Dies ist ein seit langem bestehendes Unix-Idiom für die Sicherheit und Kontrolle von Ressourcen, indem es pro Benutzer Grenzen für Dinge wie offene Dateien und Speicher und sogar Threads/Prozesse setzt.
Unter OS X muss Spotlight Prozesse erzeugen, um Dateien zu indizieren, Window Server ist dafür verantwortlich, den Sperrbildschirm aufzurufen, und Dinge, die für die Anmeldung des ersten grafischen Benutzers vorbereitet werden müssen . Jeder Benutzerprozess erhält einen Launchd, um die Programme und Dinge zu starten, die er benötigt.
Was die offizielle Dokumentation betrifft, würde ich mit diesem Artikel über Daemons und Dienste beginnen.
Es zeigt bereits auf der ersten Seite die Aufteilung auf Benutzer- und Systemebene. Sie können bei Bedarf über diesen Link nach anderen Launchd-Themen suchen (oder Xcode verwenden, um die Dokumentation offline zu durchsuchen).
statisch
_spotlight
und_windowserver
erfordertlaunchd
, mit dessen Hilfe eigene Prozesse zu starten (sind Sperrbildschirm und Indizierung [zBmdsd
] die Prozesse, die von Spotlight und Windows Server eingeplant werden)?