¿Qué hace realmente la descarga de launchctl?

4

Cuando se ejecuta launchctl unload some.plist, ¿qué es este comando traducido específicamente, en términos de comandos UNIX, etc.?

No hay nada en .plist archivos que especifican cualquier "línea de comando para ejecutar cuando el usuario especifica descargar", por lo que MacOS simplemente envía un kill señal al proceso? ¿O qué hace?

forthrin
fuente

Respuestas:

8

Sigma

launchd's unload comando envía un Sigma Señal a los procesos hijo del trabajo asociado.

Procesos separados

Si un proceso iniciado por un trabajo launchd se ha separado de su proceso principal, entonces unload No afectará ese proceso. Este es a menudo el caso de procesos demonizados .

Código fuente original

Puede descargar e inspeccionar el código fuente original de launchd . launchd desde entonces ha sido reescrito y es propiedad de Apple, pero el original documenta el comportamiento previsto unload.

Graham Miln
fuente
Muy buena respuesta! Así que es SIGTERM, entonces. Mi siguiente pregunta es si hay una manera estándar de UNIX (o macOS) de saber cuándo se ha finalizado completamente la detención de un daemon, porque el indicador no espera eso, ¿verdad? Estaré encantado de publicar una nueva pregunta sobre eso si no encaja dentro del alcance de esta pregunta.
forthrin
1
Un proceso moderno de UNIX puede usar kqueue para ser notificado cuando un proceso termina, ver stackoverflow.com/questions/22960188 y Chrome's kill_mac.cc fuente. Para obtener respuestas más detalladas y para solicitar respuestas específicas de shell, por favor hacer una nueva pregunta .
Graham Miln
2

Para responder mejor a esta pregunta, podemos ver dos cosas: los comandos UNIX y lo que está en una lista.

Comenzando con un .plist, el siguiente código usualmente está ahí

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleExecutable</key>
  <string>someApplication</string>
</dict>
</plist>

los CFBundleExecutable identifica el nombre del archivo ejecutable principal del paquete. Para una aplicación, este es el ejecutable de la aplicación. Para un paquete cargable, es el binario que se cargará dinámicamente por el paquete.

Así que escribiendo launchctl unload some.plist le dirá a MacOS la clave para ubicar el archivo ejecutable del paquete y 'descargarlo' o esencialmente eliminarlo del sistema. Esto lo dice a nivel de aplicación. .

Cuando se utiliza un comando de UNIX como kill <PID> es en referencia a un proceso específico.

Mirando qué es un Proceso vs Aplicación aquí es buena lectura


Puedes leer más sobre lo que está en .plists y cómo funcionan en manzana

akostar
fuente