Descubrí que el launchd
proceso tiene varias instancias en la lista de procesos. Lo que parece interesante es que hay cuatro usuarios bajo los cuales launchd
se ejecutan estos procesos:
Como se describe en los documentos de Apple ( Creación de agentes y demonios de lanzamiento ), launchd
se iniciará por usuario. Pero, ¿por qué los usuarios que requieren launchd
como _spotlight
y _windowserver
. Esperaría solo root
y <current_user[i.e. me]>
. ¿Por qué ambos usuarios ( _spotlight
y _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)
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.
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).
estático
_spotlight
y_windowserver
requierelaunchd
comenzar 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)?