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


29

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

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 s'arrête définitivement, il est totalement terminé. Je pense que killcela fera la même chose non?

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

Alors ... comment puis-je tuer le mysqldprocessus via le terminal?


Je l'ai fait à partir du moniteur d'activité parce que la commande «kill» ne reconnaissait pas le PID. Contrairement à votre cas, mon mysqld n'a pas redémarré dès que je l'ai tué depuis le moniteur d'activité.
Yoosaf Abdulla

Aie! N'utilisez pas -9 sauf si vous en avez VRAIMENT besoin. C'est une chose violente à faire à un processus. D'autres signaux permettent à un processus de se terminer de manière ordonnée, mais pas -9! Cela signifie donc que les tampons RAM ne sont pas vidés sur le disque, par exemple. C'est une chose particulièrement mauvaise à faire à une base de données qui est en train de faire du travail; vous reviendrez aux tables endommagées.
Jan Steinman

Réponses:


22

Le processus que vous tuez est probablement géré par launchd , la bonne façon de l'arrêter et de ne pas le redémarrer est d'utiliser launchctl unload <path to plist>. Le plist qui contrôle ce processus est dans /Library/LaunchDaemonsou /System/Library/LaunchDaemons. S'il s'agit d'un processus système et non du vôtre, vous devrez probablement l'utiliser sudopour vous mettre launchctlau travail comme vous le souhaitez.

Une meilleure façon d'essayer de l'arrêter pourrait être;

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

J'essaie de tuer le mysqldprocessus. Je ne sais pas si cela fait partie de LaunchDaemons ... mais la commande suivante est la bonne façon d'arrêter le serveur de fonctionner sudo /usr/local/mysql/support-files/mysql.server stopmais j'ai des problèmes avec cela, donc j'essaie de tuer le processus directement.
Hristo

4
s'il est retraité après kill -9le lancement, il est probablement impliqué, même indirectement. vous pouvez le dire en utilisantlaunchctl list

la liste ne contient pas "mysql". Je vais essayer ta commande en haut.
Hristo

Redirigez STDOUT et STDERR vers / dev / null.
Hello71

7
J'ai eu le même problème et j'ai pu le résoudre en supprimant mysql de launchd via sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Quelques commentaires mentionnent que "launchd est probablement impliqué" - j'ai donc pensé que je mettrais cela comme une 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 launchctlfichiers dans un emplacement différent de celui où OSX place les services "réguliers".

Sur ma boite OSX, les plistfichiers sont dans ~/Library/LaunchAgents/donc j'ai couru:

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

pour arrêter le serveur MySQL. J'avais déjà regardé /Library/LaunchDaemons/et je /Library/LaunchAgentsn'ai pas trouvé de fichier avec mysqldson nom.

Vous pouvez également installer un système basé sur le brassage appelé services, pour gérer toutes les applications de services installés par Brew, comme décrit dans cet article - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I je n'ai pas essayé cela moi-même, donc YMMV.


2
C'est ce qui m'a arrangé. Toujours une douleur lorsque vous vous battez de plusieurs façons différentes pour exécuter une pile LAMP localement.
Patrick

J'ai dû utiliser le chemin Homebrew pour supprimer cela, c'est à dire/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking

10

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

sudo kill -15 {PID}

8

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

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

6

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

Cela a fonctionné pour moi, sauf que com.oracle.oss.mysql.mysqld.plist mon MySQL local a été installé à partir du téléchargement depuis MySQL, pas via homebrew.
Jason

2

Quel processus essayez-vous de tuer? Certains processus sous Mac OS X (par exemple, le Dock, certains processus système) réapparaissent automatiquement s'ils sont tués.


J'essaie de tuer le mysqldprocessus
Hristo

Probablement géré par launchd, alors, qui le redémarrera si le processus se termine.
mipadi

1

J'ai résolu la modification du fichier /Library/LaunchDaemons/com.mysql.mysql.plist, en changeant l'attribut true en 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>

0

Un processus en cours d'exécution sur votre machine bloque mysql. Courir

ps auxwww | grep mysql

alors fais

kill -15 {PID}

Mon processus qui le bloquait était _mysql

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.