42 votes

Comment tuer un processus sur Mac OS X et éviter qu'il redémarre tout seul

Lorsque j'exécute sudo kill -9 [PID] avec le bon ID de processus, le processus s'arrête mais est ensuite redémarré et obtient un nouveau PID. J'essaie de tuer le processus mysqld.

Comment puis-je imiter le Gestionnaire d'activité pour tuer un processus ? Dans le Gestionnaire d'activité, lorsque vous appuyez sur "Quitter le processus", le processus s'arrête définitivement, il est totalement terminé. Je suppose que kill fera la même chose non?

J'avais à la fois le Gestionnaire d'activité et le terminal côte à côte pour voir si la commande fonctionne, mais chaque fois que je fais sudo kill -9 [PID], le processus dans le Gestionnaire d'activité ne disparaît pas, il se rafraîchit simplement avec un nouveau PID.

Alors... comment puis-je tuer le processus mysqld via le terminal ?

26voto

Le processus que vous êtes en train de tuer est probablement géré par launchd, la bonne manière de l'arrêter et de l'empêcher de redémarrer est d'utiliser launchctl unload . Le plist qui contrôle ce processus se trouve dans /Library/LaunchDaemons ou /System/Library/LaunchDaemons. S'il s'agit d'un processus système et non l'un des vôtres, alors vous devrez probablement utiliser sudo pour que launchctl fonctionne comme désiré.

Une meilleure manière d'essayer d'arrêter le processus pourrait être;

${MYSQL_HOME}/bin/mysqladmin -u root -proot shutdown > /dev/null 2>&1

19voto

sameers Points 301

Quelques commentaires mentionnent que "launchd est probablement impliqué" - donc j'ai pensé le mettre en tant que réponse supplémentaire. Comme le dit @jarrod-roberson, vous pouvez vérifier si launchd est impliqué en exécutant d'abord launchctl list | grep mysqld.

Une chose importante que vous apprenez 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 "réguliers".

Sur mon ordinateur OSX, les fichiers plist sont dans ~/Library/LaunchAgents/ donc j'ai exécuté:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

pour arrêter le serveur MySQL. J'avais précédemment 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 ne l'ai pas essayé moi-même, cependant, donc c'est à vos risques et périls.

13voto

Mackristo Points 1236

J'ai essayé de tuer le processus en lui envoyant le signal TERM, et cela a fonctionné. La commande était :

sudo kill -15 {PID}

13voto

silverdagger Points 231

Pour moi, cela a fonctionné une fois que j'ai compris quelle étiquette je cherchais.

launchctl list | egrep {DESIRED_LABEL}
launchctl remove {DESIRED_LABEL}

7voto

Ali Points 1676

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X