¿Por qué el launchd tiene varias instancias por usuario (no solo yo y root, sino también _spotlight y _windowserver)?

Descubrí que el launchdproceso tiene varias instancias en la lista de procesos. Lo que parece interesante es que hay cuatro usuarios bajo los cuales launchdse ejecutan estos procesos:

  • raíz
  • <usuario_actual[es decir, yo] >
  • _servidor de ventanas
  • _destacar

Como se describe en los documentos de Apple ( Creación de agentes y demonios de lanzamiento ), launchdse iniciará por usuario. Pero, ¿por qué los usuarios que requieren launchdcomo _spotlighty _windowserver. Esperaría solo rooty <current_user[i.e. me]>. ¿Por qué ambos usuarios ( _spotlighty _windowserver) requieren el lanzamiento? Agradecería cualquier referencia a documentos de Apple o cualquier otro recurso.

El proceso de relaciones padre-hijo es el siguiente:

kernel_task(0,root) -> launchd(1,root) -> launchd(130, _windowserver)
                                       -> launchd(150, <current_user[i.e. me]>)
                                       -> launchd(470, _spotlight)

Respuestas (1)

La respuesta clara es que al separar los procesos en usuarios, se separan los permisos que hereda cada proceso. Este es un idioma de Unix de larga data para la seguridad y el control de los recursos al establecer límites por usuario en cosas como archivos abiertos y memoria e incluso subprocesos/procesos.

En OS X: Spotlight necesita generar procesos para indexar archivos, el servidor de ventanas es responsable de abrir la pantalla de bloqueo y preparar las cosas para que el primer usuario gráfico inicie sesión. Root es la cuenta de administrador de facto con amplios niveles de poder y permisos . Cada proceso de usuario obtiene un lanzamiento para iniciar los programas y las cosas que necesitan.

En cuanto a la documentación oficial, comenzaría con este artículo sobre demonios y servicios.

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

Muestra la división de nivel de usuario vs sistema ya en la primera página. Puede buscar otros temas lanzados desde ese enlace si es necesario (o usar Xcode para buscar la documentación sin conexión).

¡Gracias por la explicación detallada! Una pregunta adicional: _spotlighty _windowserverrequiere launchdcomenzar con su ayuda sus propios procesos (¿son la pantalla de bloqueo y la indexación [por ejemplo, mdsd] aquellos procesos que están programados por Spotlight y Window Server)?