wie man einen Prozess in Mac OS X abbricht und ihn nicht von alleine neu starten lässt


29

Wenn ich sudo kill -9 [PID]mit der richtigen Prozess-ID starte, stoppt der Prozess, wird jedoch neu gestartet und hat eine neue PID. Ich versuche den mysqldProzess zu beenden .

Wie kann ich den Aktivitätsmonitor beim Beenden eines Prozesses nachahmen? Wenn Sie im Aktivitätsmonitor auf "Prozess beenden" klicken, wird der Prozess permanent angehalten und vollständig beendet. Ich killdenke, das wird das Gleiche tun, oder?

Ich hatte sowohl den Aktivitätsmonitor als auch das Terminal nebeneinander, um zu prüfen, ob der Befehl funktioniert, aber jedes Mal sudo kill -9 [PID], wenn ich dies tue , wird der Prozess im Aktivitätsmonitor nicht abgebrochen, sondern nur mit einer neuen PID aktualisiert.

Also ... wie kann ich den mysqldProzess über das Terminal beenden?


Ich habe es vom Aktivitätsmonitor aus gemacht, weil der Befehl 'kill' die PID nicht erkannt hat. Wieder anders als in Ihrem Fall wurde mein mysqld nicht neu gestartet, sobald ich es vom Aktivitätsmonitor aus beendet hatte.
Yoosaf Abdulla

Autsch! Verwenden Sie -9 nicht, es sei denn, Sie müssen WIRKLICH. Es ist gewalttätig, einem Prozess etwas anzutun. Andere Signale ermöglichen einen ordnungsgemäßen Abbruch eines Prozesses, jedoch nicht -9! Dies bedeutet beispielsweise, dass RAM-Puffer nicht auf die Festplatte geschrieben werden. Dies ist besonders schlecht für Datenbanken, die gerade in Arbeit sind. Sie werden zu beschädigten Tischen zurückkehren.
Jan Steinman

Antworten:


22

Der Prozess, den Sie beenden , wird wahrscheinlich von launchd verwaltet . Der richtige Weg, ihn anzuhalten und nicht neu zu starten, besteht in der Verwendung launchctl unload <path to plist>. Die Liste, die diesen Prozess steuert, befindet sich entweder in /Library/LaunchDaemonsoder /System/Library/LaunchDaemons. Wenn es sich um einen Systemprozess handelt und nicht um einen eigenen, müssen Sie ihn wahrscheinlich verwenden sudo, um launchctlwie gewünscht an die Arbeit zu gehen.

Ein besserer Weg, es zu stoppen, könnte sein;

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

Ich versuche den mysqldProzess zu beenden . Ich bin nicht sicher, ob dies Teil von LaunchDaemons ist, aber der folgende Befehl ist der richtige Weg, um den Server am Laufen zu hindern, sudo /usr/local/mysql/support-files/mysql.server stopaber ich habe Probleme damit, also versuche ich, den Prozess direkt abzubrechen.
Hristo

4
wenn es nach kill -9dem launchd angepasst wird, ist es wahrscheinlich, wenn auch indirekt. Sie können sagen, indem Sielaunchctl list

Die Liste enthält kein "mysql". Ich werde Ihren Befehl oben versuchen.
Hristo

Leiten Sie STDOUT und STDERR nach / dev / null um.
Hallo71

7
Ich hatte das gleiche Problem und konnte es lösen, indem ich mysql von launchd via sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Ein paar Kommentare erwähnen, dass "launchd ist wahrscheinlich beteiligt" - also dachte ich, ich würde dies als zusätzliche Antwort ausgeben. Wie @ jarrod-roberson sagt, können Sie überprüfen, ob launchd beteiligt ist, indem Sie zuerst ausführen launchctl list | grep mysqld.

Eine wichtige Sache, die Sie hier lernen, ist, ob MySQL mit Homebrew installiert wurde oder nicht - Brew speichert seine launchctlDateien an einem anderen Ort als dort, wo OSX die "regulären" Dienste bereitstellt.

Auf meiner OSX-Box befinden sich die plistDateien in ~/Library/LaunchAgents/Also lief ich:

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

um den MySQL Server zu stoppen. Ich hatte vorher nachgesehen /Library/LaunchDaemons/und /Library/LaunchAgentskeine Datei mit mysqlddem Namen gefunden.

Sie können auch ein auf servicesBrew basierendes System mit dem Namen installieren , um alle von Brew installierten Diensteanwendungen zu verwalten, wie in diesem Beitrag beschrieben - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I Ich habe das allerdings nicht selbst ausprobiert, also YMMV.


2
Das hat es für mich behoben. Immer ein Schmerz, wenn Sie auf verschiedene Arten kämpfen, um einen LAMP-Stapel lokal auszuführen.
Patrick

Ich musste den Homebrew-Pfad verwenden, um dies zu entfernen, dh/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
Micjamking

10

Ich habe versucht, den Prozess zu beenden, indem ich das TERMSignal gesendet habe, und das hat funktioniert. Der Befehl lautete:

sudo kill -15 {PID}

8

Bei mir hat das geklappt, als ich herausgefunden habe, nach welchem ​​Label ich gesucht habe.

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

6

Entladen Sie den Dienst und stoppen Sie den Dämon:

sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysql.plist

Laden Sie den Dienst und starten Sie den Daemon:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

Dies funktionierte für mich mit der Ausnahme, dass com.oracle.oss.mysql.mysqld.plist Mein lokales MySQL durch Herunterladen von MySQL installiert wurde, nicht über Homebrew.
Jason

2

Welchen Prozess versuchst du zu töten? Einige Prozesse in Mac OS X (z. B. das Dock, einige Systemprozesse) werden automatisch wiederhergestellt, wenn sie beendet werden.


Ich versuche, den mysqldProzess
Hristo

Wahrscheinlich von verwaltet launchd, der es neu startet, wenn der Prozess abbricht.
mipadi

1

Ich habe die Bearbeitung der Datei /Library/LaunchDaemons/com.mysql.mysql.plist gelöst und das Attribut true in false geändert

<!--?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

Auf Ihrem Computer wird ein Prozess ausgeführt, der mysql blockiert. Lauf

ps auxwww | grep mysql

dann mach

kill -15 {PID}

Mein Prozess, der es blockierte, war _mysql

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.