13 votes

Comment trouver l'agent de lancement ou le démon qui démarre un processus ?

Après avoir installé Autodesk Smoke, j'ai deux processus httpd qui tournent en permanence, et j'aimerais les arrêter. Lorsque j'utilise sudo killall httpd ils s'arrêtent et redémarrent immédiatement. L'Activity Monitor montre que le processus parent est launchd, mais comment puis-je déterminer quel agent ou démon le démarre afin de le désactiver ?

launchctl list | grep httpd montre ces résultats :

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

Je regarde dans /System/Library/LaunchDaemons/org.apache.httpd.plist et il affiche ce qui suit. Vous pouvez voir que c'est réglé sur disabled . L'autre launchd avec un nom bizarre n'apparaît pas dans une recherche de système de fichiers, donc je n'ai aucune idée de ce que c'est.

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

6voto

Vous pouvez récupérer la sortie de launchctl list pour le pid :

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

Ensuite, par exemple, recherchez un fichier nommé com.example.foo.plist sur ~/Library/LaunchAgents/ , /Library/LaunchAgents/ ou /Library/LaunchDaemons/ .

Edit : la touche "Disabled" peut être remplacée dans /var/db/launchd.db/com.apple.launchd/overrides.plist qui est modifié lorsque launchctl load -w est exécuté en tant que Root, ou dans /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist qui est modifié lorsque launchctl load -w est exécuté en tant qu'utilisateur.

Si le plist Apache fourni avec OS X était activé, vous pouvez le désactiver en exécutant sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist .

1voto

kenorb Points 11627

En fonction de la valeur de l'étiquette (par ex. org.apache.httpd ), vous pouvez essayer de trouver le .plist en utilisant la commande suivante :

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

Pour trouver ce qui a démarré le processus, vérifiez ses PIDs parents, par ex.

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

Ou utilisez pstree en spécifiant le PID manuellement, par ex.

pstree 92

0voto

LCC Points 672

Vous obtenez ainsi une liste de toutes les définitions de poste faisant référence à httpd .

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

0voto

Chris Cogdon Points 101

Le comportement de launchctl a changé dans la mesure où si un service est activé de force, il va pas modifier le contenu du .plist source, mais dans un répertoire séparé (que vous ne devriez pas modifier). Consultez la page de manuel de launchctl, et l'option "-w" de la commande "load". Donc, le simple examen du fichier ne vous dira pas nécessairement si le programme est désactivé ou non. Il est clair qu'il n'est pas désactivé :)

Essayez "launchctl unload -w org.apache.httpd.plist". Si cela fonctionne pour vous, vous pourrez toujours le lancer à la demande avec "launchctl start org.apache.httpd.plist".

Si cela ne fonctionne pas, essayez "launchctl remove org.apache.httpd.plist" qui ne vous permettra pas de démarrer manuellement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X