Comment savoir quel agent de lancement ou démon démarre un processus

11

Après avoir installé Autodesk Smoke, j'ai deux processus httpd en cours d'exécution, et je voudrais les arrêter. Lorsque j'utilise sudo killall httpd, ils s'arrêtent et sont redémarrés immédiatement. Le Moniteur d'activité montre que le processus parent est launchd, mais comment puis-je déterminer quel agent ou démon le démarre pour que je puisse le désactiver?

launchctl list | grep httpd montre ces résultats:

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

Je regarde /System/Library/LaunchDaemons/org.apache.httpd.plistdedans et ça montre ce qui suit. Vous pouvez voir qu'il est réglé sur disabled. L'autre launchdélément avec un nom étrange 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>
Elliott
la source
J'ai appris d'Autodesk que je peux arrêter le processus /usr/sbin/apachectl stopmais je ne sais toujours pas comment le désactiver après chaque redémarrage.
Elliott
(Commentaire tardif, je sais!) Deux pistes possibles pour empêcher launchd de le redémarrer: (i) launchctl unload(bien que je ne sais pas si cela nécessite que vous spécifiiez le chemin vers le plist), (ii) Si c'est dans vos éléments de connexion , utilisez l'outil Préférences Système -> "Utilisateurs et groupes" -> "Éléments de connexion" -> Supprimer l'entrée incriminée si elle est trouvée.
Vivek

Réponses:

5

Vous pouvez grep la sortie de launchctl listpour le pid:

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

Ensuite , par exemple regarder un fichier nommé com.example.foo.plistdans ~/Library/LaunchAgents/, /Library/LaunchAgents/ou /Library/LaunchDaemons/.

Modifier: la clé désactivée peut être remplacée dans /var/db/launchd.db/com.apple.launchd/overrides.plist, qui est modifiée lorsqu'elle launchctl load -west exécutée en tant que root, ou dans /var/db/launchd.db/com.apple.launchd.peruser.$UID/overrides.plist, qui est modifiée lorsqu'elle launchctl load -west exécutée en tant qu'utilisateur.

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

Lri
la source
J'ai obtenu le PID, puis lancé grectctl mais je n'ai rien trouvé avec ce numéro.
Elliott
Essayez en fait d'utiliser sudo launchctl list. launchctl listne semble inclure que les travaux chargés par le processus de lancement de l'utilisateur.
Lri
OK, c'est logique, merci. Mais n'a pas vraiment résolu le problème ... J'ai ajouté plus de détails à la question.
Elliott
0

Cela vous donne une liste de toutes les définitions d'emploi se rapportant à httpd.

grep -lR httpd /System/Library/Launch*/ /Library/Launch*/ ~/Library/LaunchAgents/
LCC
la source
Bonne idée, mais n'a pas résolu le problème. Il n'y a qu'un seul résultat et il est désactivé. J'ai ajouté plus de détails à la question.
Elliott
1
Le fait qu'il soit désactivé ne signifie pas qu'il n'a pas été démarré. La Disabledclé peut être remplacée par les overrides.plistfichiers dans / ci-dessous /var/db/launchd.db/. Un travail désactivé peut également être démarré manuellement (pas automatiquement pendant le processus de démarrage / connexion).
LCC
Merci, je n'en savais rien. J'ai essayé grep -rn apache /private/var/db/launchd.dbet trouvé un seul résultat. C'est désactivé. J'ai besoin de comprendre comment ce service est démarré et comment le désactiver vraiment.
Elliott
0

Le comportement de launchctl a changé en ce que si un service est activé de force, il ne modifiera pas le contenu du .plist source, mais un répertoire séparé (que vous ne devriez pas modifier). Consultez la page de manuel pour launchctl, et l'option "-w" sous la commande "load". Ainsi, l'examen du fichier ne vous indiquera pas nécessairement s'il est désactivé ou non. Clairement ce n'est pas désactivé :)

Essayez "launchctl unload -w org.apache.httpd.plist". Si cela fonctionne pour vous, vous pourrez toujours le démarrer à 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.

Chris Cogdon
la source
0

Sur la base de la valeur de l'étiquette (par exemple org.apache.httpd), vous pouvez essayer de trouver le .plistà l'aide de 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 PID parents, par exemple

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

Ou utilisez la pstreecommande en spécifiant le PID manuellement, par exemple

pstree 92
Kenorb
la source