web-dev-qa-db-fra.com

comment tuer le processus dans Mac OS X et ne pas le redémarrer tout seul

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?

28
Hristo

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

Sudo kill -15 {PID}
10
Hristo

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
22
Jarrod Roberson

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.

9
sameers

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}
6
silverdagger

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
6
Osaev

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.

2
mipadi

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>
1
Mario

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

0
Jonathan O