Lorsque j'exécute Sudo kill -9 [PID]
avec l'ID de processus approprié, le processus s'arrête, puis il est redémarré et possède un nouveau PID. J'essaie de tuer le processus mysqld
.
Comment puis-je imiter le moniteur d'activité en tuant un processus? Dans le moniteur d'activité, lorsque vous appuyez sur "Quitter le processus", le processus cesse définitivement de s'exécuter, il est totalement arrêté. Je pense que kill
fera la même chose, non?
J'avais le moniteur d'activité et le terminal l'un à côté de l'autre pour voir si la commande fonctionnait, mais chaque fois que je le fais, Sudo kill -9 [PID]
, le processus dans le moniteur d'activité ne disparaît pas, il est simplement actualisé avec un nouveau PID.
Alors ... comment puis-je tuer le processus mysqld
via le terminal?
J'ai essayé de tuer le processus en lui envoyant le signal TERM
, et cela a fonctionné. La commande était:
Sudo kill -15 {PID}
Le processus que vous êtes en train de tuer est probablement géré par launchd , la manière appropriée de l'arrêter et de ne pas le redémarrer consiste à utiliser launchctl unload <path to plist>
. La plist qui contrôle ce processus est dans /Library/LaunchDaemons
ou /System/Library/LaunchDaemons
. S'il s'agit d'un processus système et pas du vôtre, vous devrez probablement utiliser Sudo
pour que launchctl
fonctionne comme vous le souhaitez.
Un meilleur moyen d'essayer et d'arrêter cela pourrait être;
${MYSQL_HOME}/bin/mysqladmin -u root -proot shutdown > /dev/null 2>&1
Quelques commentaires mentionnent que "launchd est probablement impliqué" - j'ai donc pensé en faire une réponse supplémentaire. Comme @ jarrod-roberson dit, vous pouvez vérifier si launchd est impliqué en exécutant d'abord launchctl list | grep mysqld
.
Une chose importante à savoir ici est de savoir si MySQL a été installé avec Homebrew ou non - Brew stocke ses fichiers launchctl
dans un emplacement différent de celui où OSX place les services "normaux".
Sur ma machine OSX, les fichiers plist
sont en ~/Library/LaunchAgents/
. J'ai donc lancé:
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
arrêter le serveur MySQL. J'avais déjà regardé dans /Library/LaunchDaemons/
et /Library/LaunchAgents
mais je n'ai pas trouvé de fichier avec mysqld
dans son nom.
Vous pouvez également installer un système basé sur Brew appelé services
pour gérer toutes les applications de services installées par Brew, comme décrit dans cet article - http://robots.thoughtbot.com/starting-and- stopping-background-services-with-homebrew Je n'ai pas essayé moi-même, cependant, donc YMMV.
Pour moi, cela a fonctionné une fois que j'ai identifié le label que je cherchais.
launchctl list | egrep {DESIRED_LABEL}
launchctl remove {DESIRED_LABEL}
Déchargez le service et arrêtez le démon:
Sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysql.plist
Chargez le service et démarrez le démon:
Sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
Quel processus essayez-vous de tuer? Certains processus de Mac OS X (par exemple, le Dock, certains processus système) réapparaissent automatiquement s'ils sont supprimés.
J'ai résolu l'édition du fichier /Library/LaunchDaemons/com.mysql.mysql.plist, en remplaçant l'attribut true par false
<!--?xml version="1.0" encoding="UTF-8"?-->
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<false />
<key>Label</key>
<string>com.mysql.mysqld</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/mysql/bin/mysqld_safe</string>
<string>--user=mysql</string>
</array>
</dict>
</plist>
Un processus en cours d'exécution sur votre ordinateur bloque mysql. Courir
ps auxwww | grep mysql
alors fais
kill -15 {PID}
Mon processus qui bloquait était _mysql