Come scoprire quale agente di lancio o daemon sta avviando un processo


11

Dopo aver installato Autodesk Smoke, ho sempre due processi httpd in esecuzione e vorrei interromperli. Quando uso sudo killall httpd, si fermano e vengono riavviati immediatamente. Activity Monitor mostra che il processo padre è stato avviato, ma come posso determinare quale agente o daemon lo sta avviando in modo da poterlo disabilitare?

launchctl list | grep httpd mostra questi risultati:

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

Guardo dentro /System/Library/LaunchDaemons/org.apache.httpd.pliste mostra quanto segue. Puoi vedere che è impostato su disabled. L'altro launchdoggetto con un nome strano non viene visualizzato nella ricerca di un filesystem, quindi non ho idea di cosa sia.

<?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>

Ho imparato da Autodesk che posso interrompere il processo /usr/sbin/apachectl stopma non so ancora come disabilitarlo dopo ogni riavvio.
Elliott il

(Commento in ritardo, lo so!) Due possibili cause per impedire a launchd di avviarlo di nuovo: (i) launchctl unload(anche se non so se questo ha bisogno che tu specifichi il percorso per il plist), (ii) Se è nei tuoi login , utilizza lo strumento Preferenze di Sistema -> "Utenti e gruppi" -> "Elementi di accesso" -> Elimina la voce offensiva se trovata.
Vivek,

Risposte:


5

Puoi grep l'output di launchctl listper il pid:

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

Quindi per esempio cercare un file chiamato com.example.foo.plistin ~/Library/LaunchAgents/, /Library/LaunchAgents/o /Library/LaunchDaemons/.

Modifica: la chiave disabilitata può essere sovrascritta in /var/db/launchd.db/com.apple.launchd/overrides.plist, che viene modificata quando launchctl load -wviene eseguita come root o in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, che viene modificata quando launchctl load -wviene eseguita come utente.

Se il plist di Apache fornito con OS X era abilitato, puoi disabilitarlo eseguendolo sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist.


Ho ottenuto il PID, quindi ho lanciato Launchctl ma non ho trovato nulla con quel numero.
Elliott,

In realtà prova a usare sudo launchctl list. launchctl listsembra includere solo i lavori caricati dal processo di avvio dell'utente.
Lri

OK ha senso, grazie. Ma non ho davvero risolto il problema ... Ho aggiunto maggiori dettagli alla domanda.
Elliott l'

0

Questo ti dà un elenco di tutte le definizioni di lavoro che fanno riferimento httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/

Buona idea, ma non ha risolto il problema. C'è solo un risultato ed è disabilitato. Ho aggiunto maggiori dettagli alla domanda.
Elliott l'

1
Solo perché è disabilitato non significa che non è stato avviato. La Disabledchiave può essere sovrascritta dai overrides.plistfile in / sotto /var/db/launchd.db/. Inoltre, un processo disabilitato può essere comunque avviato manualmente (non automaticamente durante il processo di avvio / accesso).
LCC

Grazie, non lo sapevo. Ho provato grep -rn apache /private/var/db/launchd.dbe trovato solo un risultato. È disabilitato Devo capire come viene avviato questo servizio e come disabilitarlo veramente.
Elliott il

0

Il comportamento di launchctl è cambiato in quanto se un servizio è abilitato forzatamente, non modificherà il contenuto del .plist di origine, ma una directory separata (che non dovresti modificare). Controllare la pagina man per launchctl e l'opzione "-w" sotto il comando "load". Quindi, semplicemente esaminando il file non sarà necessario dirti se è disabilitato o meno. Chiaramente non è disabilitato :)

Prova "launchctl unload -w org.apache.httpd.plist". Se questo funziona per te, sarai comunque in grado di avviarlo su richiesta con "launchctl start org.apache.httpd.plist"

Se il problema persiste, prova "launchctl remove org.apache.httpd.plist" che non ti permetterà di avviarlo manualmente.


0

In base al valore dell'etichetta (ad es. org.apache.httpd), Puoi provare a trovare .plistil seguente comando:

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

Per trovare ciò che ha avviato il processo, controlla i suoi PID principali, ad es

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

Oppure usa il pstreecomando specificando manualmente il PID, ad es

pstree 92
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.