Warum hat der Launchd mehrere Instanzen pro Benutzer (nicht nur ich und root, sondern auch _spotlight und _windowserver)?

Ich habe festgestellt, dass der launchdProzess mehrere Instanzen in der Prozessliste hat. Interessant ist, dass es vier Benutzer gibt, unter denen diese launchdProzesse ausgeführt werden:

  • Wurzel
  • <aktueller_Benutzer[dh ich]>
  • _windowserver
  • _Scheinwerfer

Wie in den Dokumenten von Apple ( Creating Launch Daemons and Agents ) beschrieben, launchdwird pro Benutzer gestartet. Aber warum sind die Benutzer, die launchdwie _spotlightund erfordern _windowserver. Ich würde nur rootund erwarten <current_user[i.e. me]>. Warum benötigen beide Benutzer ( _spotlightund _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)

Antworten (1)

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.

https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html

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).

danke für die ausführliche erklärung! Eine Zusatzfrage: _spotlightund _windowservererfordert launchd, mit dessen Hilfe eigene Prozesse zu starten (sind Sperrbildschirm und Indizierung [zB mdsd] die Prozesse, die von Spotlight und Windows Server eingeplant werden)?