Cómo averiguar qué agente de lanzamiento o demonio está iniciando un proceso

11

Después de instalar Autodesk Smoke, tengo dos procesos httpd ejecutándose todo el tiempo y me gustaría detenerlos. Cuando uso sudo killall httpd, se detienen y se reinician de inmediato. El Monitor de actividad muestra que el proceso principal se inicia, pero ¿cómo puedo determinar qué agente o demonio lo está iniciando para poder desactivarlo?

launchctl list | grep httpd muestra estos resultados:

302 -   0x7f94ea700dd0.anonymous.httpd  
92  -   org.apache.httpd

Miro /System/Library/LaunchDaemons/org.apache.httpd.plisty muestra lo siguiente. Puedes ver que está configurado en disabled. El otro launchdelemento con un nombre extraño no aparece en una búsqueda del sistema de archivos, por lo que no tengo idea de qué es.

<?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>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd</string>
    <key>EnvironmentVariables</key>
    <dict>
        <key>XPC_SERVICES_UNAVAILABLE</key>
        <string>1</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>OnDemand</key>
    <false/>
</dict>
</plist>
Elliott
fuente
Aprendí de Autodesk que puedo detener el proceso /usr/sbin/apachectl stoppero aún no sé cómo deshabilitarlo después de cada reinicio.
Elliott
(¡Comentario tardío, lo sé!) Dos posibles pistas para evitar que launchd vuelva a iniciarlo: (i) launchctl unload(aunque no sé si esto necesita que especifique la ruta al plist), (ii) Si está en sus elementos de inicio de sesión , use la herramienta Preferencias del sistema -> "Usuarios y grupos" -> "Elementos de inicio de sesión" -> Eliminar la entrada ofensiva si la encuentra.
Vivek

Respuestas:

5

Puede grep la salida de launchctl listpara el pid:

$ pgrep -fl foo
40679 bash /tmp/foo
$ launchctl list|grep 40679
40679   -   com.example.foo

Entonces, por ejemplo, buscar un archivo con el nombre com.example.foo.plistde ~/Library/LaunchAgents/, /Library/LaunchAgents/o /Library/LaunchDaemons/.

Editar: la clave Desactivada se puede anular en /var/db/launchd.db/com.apple.launchd/overrides.plist, que se modifica cuando launchctl load -wse ejecuta como root, o en /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, que se modifica cuando launchctl load -wse ejecuta como usuario.

Si la lista Apache que viene con OS X estaba habilitada, puede deshabilitarla ejecutando sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.

Lri
fuente
Obtuve el PID, luego grepe launchctl pero no encontré nada con ese número.
Elliott
Realmente intente usar sudo launchctl list. launchctl listsolo parece incluir trabajos cargados por el proceso de inicio del usuario.
Lri
Ok, eso tiene sentido, gracias. Pero realmente no resolvió el problema ... Agregué más detalles a la pregunta.
Elliott
0

Esto le proporciona una lista de todas las definiciones de trabajo a las que se hace referencia httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
LCC
fuente
Buena idea, pero no resolvió el problema. Solo hay un resultado y está deshabilitado. Agregué más detalles a la pregunta.
Elliott
1
El hecho de que esté deshabilitado no significa que no se haya iniciado. La Disabledclave puede ser anulada por los overrides.plistarchivos en / debajo /var/db/launchd.db/. Además, un trabajo deshabilitado aún puede iniciarse manualmente (no automáticamente durante el proceso de inicio / inicio de sesión).
LCC
Gracias, no sabía sobre eso. Intenté grep -rn apache /private/var/db/launchd.dby encontré solo un resultado. Está deshabilitado Necesito averiguar cómo se inicia este servicio y cómo deshabilitarlo realmente.
Elliott
0

El comportamiento de launchctl ha cambiado en el sentido de que si un servicio se habilita por la fuerza, no modificará el contenido de la fuente .plist, sino un directorio separado (que no debe modificar). Verifique la página de manual para launchctl y la opción "-w" bajo el comando "cargar". Por lo tanto, simplemente examinar el archivo no necesariamente le dirá si está deshabilitado o no. Claramente no está deshabilitado :)

Intente "launchctl unload -w org.apache.httpd.plist". Si eso funciona para usted, aún podrá iniciarlo a pedido con "launchctl start org.apache.httpd.plist"

Si eso no funciona, intente "launchctl remove org.apache.httpd.plist", que no le permitirá iniciar manualmente.

Chris Cogdon
fuente
0

Según el valor de la etiqueta (p org.apache.httpd. Ej. ), Puede intentar encontrarlo .plistutilizando el siguiente comando:

find /System/Library/Launch* /Library/Launch* ~/Library/Launch* -name '*.plist' -print -exec /usr/libexec/PlistBuddy -c "Print Label" {} ';' | grep org.apache.httpd -A1

Para encontrar qué inició el proceso, verifique sus PID principales, por ejemplo

ps -f $(launchctl list | grep org.apache.httpd | grep -o '^[0-9]\+')

O utilice el pstreecomando especificando PID manualmente, por ejemplo

pstree 92
kenorb
fuente