Qué son LaunchAgents y LaunchDaemons en Mac y cuáles se pueden quitar
LaunchAgents y LaunchDaemons son carpetas de pequeños archivos .plist que le dicen a launchd de macOS qué iniciar en segundo plano y cuándo. Un agente se ejecuta para un usuario con la sesión iniciada y puede mostrar cosas en pantalla; un daemon se ejecuta para todo el sistema, sin interfaz de usuario. Normalmente puedes quitar los elementos de terceros de una app que ya no tienes. No toques /System/Library, y detén una tarea antes de mover su archivo.
Las cinco carpetas
La guía de launchd de Apple enumera estas ubicaciones:
| Carpeta | Qué contiene | Puedes tocarla |
|---|---|---|
~/Library/LaunchAgents |
Agentes de terceros solo para tu cuenta | Sí, con cuidado |
/Library/LaunchAgents |
Agentes de terceros para todos los usuarios | Sí, con la contraseña de administrador |
/Library/LaunchDaemons |
Daemons de sistema de terceros | Sí, con la contraseña de administrador |
/System/Library/LaunchAgents |
Agentes de Apple | No |
/System/Library/LaunchDaemons |
Daemons de Apple | No |
La página man launchd traza la línea: un daemon es un servicio de todo el sistema con una sola instancia para todos los clientes, y no debería mostrar una interfaz de usuario. Un agente se ejecuta por usuario, y el trabajo que interactúa con un usuario va ahí. En la práctica, un auxiliar de la barra de menús o un actualizador suele ser un agente, y un servicio de VPN, un auxiliar de controlador de audio o un motor de copias de seguridad suele ser un daemon.
No todo elemento en segundo plano tiene un archivo aquí. Las apps pueden guardar su plist dentro de su propio paquete, así que Ajustes del Sistema › General › Ítems de inicio y extensiones puede listar algo que estas carpetas no tienen. Cómo evitar que las apps se abran al iniciar explica esa pantalla.
Léelo antes de juzgarlo
ls -la ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons
plutil -p ~/Library/LaunchAgents/com.example.helper.plist
Cuatro claves cuentan casi toda la historia:
| Clave | Qué significa |
|---|---|
Label |
El nombre de la tarea, que es lo que usa launchctl |
Program o ProgramArguments |
Qué ejecuta. Esta es la ruta que hay que comprobar |
RunAtLoad |
Se inicia en cuanto la tarea se carga, normalmente al iniciar sesión o al arrancar |
KeepAlive |
launchd la reinicia si se detiene, así que cerrarla no dura |
com.example.helper es un marcador de posición, así que usa el nombre de tu propio archivo. Si ProgramArguments apunta a una app que quitaste, ese archivo es un resto y se puede eliminar sin riesgo. Si apunta a una app que sigues usando, quitarlo puede romper sus actualizaciones, su sincronización, su licencia, su VPN o su audio.
Cómo quitar uno
Detén primero la tarea. Mover el archivo no detiene una tarea que ya se está ejecutando, y sigue cargada hasta que cierres la sesión o reinicies.
Para un agente de tu cuenta:
launchctl bootout gui/$(id -u)/com.example.helper
mv ~/Library/LaunchAgents/com.example.helper.plist ~/.Trash/
Para un daemon de /Library/LaunchDaemons:
sudo launchctl bootout system/com.example.helper
sudo mv /Library/LaunchDaemons/com.example.helper.plist ~/.Trash/
Un agente de /Library/LaunchAgents se carga en la sesión de cada usuario, así que deténlo con la forma gui/$(id -u)/ y mueve el archivo con sudo mv. Usa en esos comandos el valor de Label, que puede diferir del nombre del archivo.
Confirma que ha desaparecido con launchctl print gui/$(id -u)/com.example.helper o sudo launchctl print system/com.example.helper, que deberían informar de que no se pudo encontrar el servicio. Luego usa la app durante un día. Si algo se rompió, devuelve el archivo y reinicia.
Para conservar el archivo y solo impedir que la tarea se cargue:
launchctl disable gui/$(id -u)/com.example.helper
launchctl print-disabled gui/$(id -u)
launchctl enable con el mismo destino lo revierte.
Qué no hacer
- No toques
/System/Library/LaunchAgentsni/System/Library/LaunchDaemons. Están en el volumen del sistema de solo lectura y pertenecen a macOS. - No borres solo por el nombre de la empresa. Un archivo con el nombre de un producto de seguridad o de un controlador de dispositivo puede ser lo que mantiene ese producto en funcionamiento, y en un Mac gestionado puede ser una política de la empresa.
- No quites el plist de una app que sigues usando esperando que desaparezca solo su aviso de actualización. Revisa antes el ajuste de la propia app.
- No uses guías antiguas que dicen
launchctl unload. El manual de Apple lo lista como un subcomando heredado, ybootoutes la forma actual.
Dónde encaja Mole
La pestaña Apps de Mole tiene un segmento Inicio que lista estos elementos, lee el Label de cada plist y nombra los auxiliares según la app a la que pertenecen. Los agrupa bajo encabezados como Ítems de inicio y Servicios en segundo plano, y marca Programa ausente cuando una tarea apunta a algo que ya no existe, que es la señal habitual de un resto. Para un plist de launchd comprobado en ~/Library/LaunchAgents, /Library/LaunchAgents o /Library/LaunchDaemons, puedes desactivarlo con el interruptor de la fila, volver a activarlo o moverlo a la Papelera, y Mole detiene antes la tarea. Los productos de seguridad y de gestión quedan bloqueados, y los elementos que no puede cambiar con seguridad abren Ajustes del Sistema. Cuando un proceso de Estado te resulta desconocido, ¿Por qué se ejecuta? nombra el servicio de launchd y su plist. Desinstalar una app con Mole también ofrece revisar sus elementos de inicio.
Preguntas frecuentes
¿Es seguro borrar archivos de LaunchAgents?
Sí para un resto de una app que quitaste, y a veces no para una app que sigues usando. Lee antes ProgramArguments con plutil -p, y detén la tarea con launchctl bootout antes de mover el archivo a la Papelera para poder devolverlo.
¿Cuál es la diferencia entre un LaunchAgent y un LaunchDaemon?
Un agente se ejecuta para cada usuario con la sesión iniciada y puede interactuar con él. Un daemon se ejecuta en todo el sistema con una sola instancia, normalmente antes de que nadie inicie sesión, y no tiene interfaz de usuario.
¿Por qué volvió un LaunchAgent que había quitado?
La app que lo instaló sigue en el Mac y lo volvió a escribir cuando se abrió o se actualizó. Desactiva la función en la app, o desinstala la app, porque quitar solo el archivo no dura.
¿Puede un LaunchAgent ser malware?
Sí. El adware persistente suele instalarse aquí, porque sobrevive a un reinicio. Un Label desconocido que ejecuta algo desde una carpeta oculta o una ruta temporal merece una mirada más atenta, así que busca la ruta exacta y comprueba quién firmó el programa.
¿Necesito reiniciar después de quitar uno?
No si usaste launchctl bootout, que lo detiene al instante. Si solo moviste el archivo, la tarea sigue cargada hasta que cierres la sesión o reinicies.