Come scoprire quale launch agent o demone sta avviando un processo

11

Dopo aver installato Autodesk Smoke, ho due processi httpd in esecuzione tutto il tempo, e mi piacerebbe fermarli. Quando uso sudo killall httpd , si fermano e vengono riavviati immediatamente. Activity Monitor mostra che il processo genitore è avviato, ma come faccio a determinare quale agente o demone lo sta avviando, quindi posso disabilitarlo?

launchctl list | grep httpd mostra questi risultati:

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

Guardo in /System/Library/LaunchDaemons/org.apache.httpd.plist e mostra quanto segue. Puoi vedere che è impostato su disabled . L'altro elemento launchd con un nome strano non viene visualizzato in una ricerca di file system, 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>
    
posta Elliott 06.12.2013 - 18:14
fonte

4 risposte

5

Puoi annullare l'output di launchctl list per il pid:

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

Quindi, ad esempio, cerca un file denominato com.example.foo.plist in ~/Library/LaunchAgents/ , /Library/LaunchAgents/ o /Library/LaunchDaemons/ .

Modifica: la chiave Disabled può essere sostituita in /var/db/launchd.db/com.apple.launchd/overrides.plist , che viene modificata quando launchctl load -w viene eseguito come root o in /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist , che viene modificato quando launchctl load -w viene eseguito come utente.

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

    
risposta data 07.12.2013 - 08:36
fonte
0

Questo ti dà un elenco di tutte le definizioni di lavoro che si riferiscono a httpd .

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
    
risposta data 08.12.2013 - 16:09
fonte
0

Il comportamento di launchctl è cambiato in quanto se un servizio è abilitato forzatamente, non modificherà il contenuto della sorgente .plist, ma una directory separata (che non dovresti modificare). Controlla la pagina man di launchctl e l'opzione "-w" sotto il comando "load". Quindi, semplicemente esaminando il file non è 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 non funziona, prova "launchctl remove org.apache.httpd.plist" che non ti consente di iniziare manualmente.

    
risposta data 10.03.2016 - 20:25
fonte
0

In base al valore dell'etichetta (ad esempio org.apache.httpd ), puoi provare a trovare .plist utilizzando il 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]\+')

O utilizza il comando pstree specificando manualmente il PID, ad es.

pstree 92
    
risposta data 11.01.2018 - 22:43
fonte

Leggi altre domande sui tag