jak zabić proces w Mac OS X i nie uruchamiać go samodzielnie

29

Gdy uruchamiam sudo kill -9 [PID]z odpowiednim identyfikatorem procesu, proces zatrzymuje się, ale następnie jest ponownie uruchamiany i ma nowy PID. Próbuję zabić mysqldproces.

Jak mogę naśladować Monitor aktywności podczas zabijania procesu? Po naciśnięciu przycisku „Zakończ proces” w monitorze aktywności proces trwale przestaje działać, jest całkowicie zakończony. Myślę, że killzrobi to samo, prawda?

Miałem zarówno Monitor aktywności, jak i terminal obok siebie, aby sprawdzić, czy polecenie działa, ale za każdym razem, gdy to robię sudo kill -9 [PID], proces w Monitorze aktywności nie znika, po prostu odświeża się z nowym PID.

Więc ... jak zabić mysqldproces przez terminal?

Hristo
źródło
Zrobiłem to z monitora aktywności, ponieważ polecenie „zabij” nie rozpoznawało PID. Ponownie, w przeciwieństwie do twojego przypadku, mój mysqld nie uruchomił się ponownie, gdy tylko zabiłem go z Monitora aktywności.
Yoosaf Abdulla
Ojej! Nie używaj -9, chyba że NAPRAWDĘ potrzebujesz. Proces ten ma charakter gwałtowny. Inne sygnały pozwalają na zakończenie procesu w uporządkowany sposób, ale nie -9! Oznacza to, że na przykład bufory RAM nie są opróżniane na dysk. Jest to szczególnie zła rzecz dla bazy danych, która jest w trakcie wykonywania pracy; wrócisz do uszkodzonych stolików.
Jan Steinman

Odpowiedzi:

22

Proces, który zabijasz, jest prawdopodobnie zarządzany przez uruchomienie , właściwym sposobem jest jego zatrzymanie i zrestartowanie launchctl unload <path to plist>. Lista kontrolująca ten proces znajduje się w jednym /Library/LaunchDaemonslub /System/Library/LaunchDaemons. Jeśli jest to proces systemowy, a nie własny, prawdopodobnie będziesz musiał użyć go, sudoaby przejść launchctldo pracy zgodnie z oczekiwaniami.

Lepszym sposobem może być zatrzymanie tego;

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

źródło
Próbuję zabić mysqldproces. Nie jestem pewien, czy jest to część LaunchDaemons ... ale następujące polecenie to właściwy sposób na zatrzymanie działania serwera, sudo /usr/local/mysql/support-files/mysql.server stopale mam z tym problemy, więc próbuję zabić proces bezpośrednio.
Hristo,
4
jeśli jest on przekształcany po kill -9uruchomieniu, prawdopodobnie jest zaangażowany, nawet jeśli pośrednio. możesz powiedzieć za pomocąlaunchctl list
lista nie zawiera „mysql”. Spróbuję twojego polecenia do góry.
Hristo,
Przekieruj STDOUT i STDERR do / dev / null.
Hello71,
7
Miałem ten sam problem i byłem w stanie rozwiązać, usuwając mysql z uruchomionego przez sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff
11

Kilka komentarzy wspomina, że ​​„prawdopodobnie jest to związane z uruchomieniem” - więc pomyślałem, że przedstawię to jako dodatkową odpowiedź. Jak mówi @ jarrod-roberson, możesz sprawdzić, czy uruchomienie jest włączone przy pierwszym uruchomieniu launchctl list | grep mysqld.

Ważną rzeczą, której się tutaj dowiadujesz, jest to, czy MySQL został zainstalowany z Homebrew, czy nie - Brew przechowuje swoje launchctlpliki w innym miejscu niż OSX, gdzie umieszcza się „zwykłe” usługi.

W moim systemie OSX plistpliki są w ~/Library/LaunchAgents/Więc uruchomiłem:

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

aby zatrzymać serwer MySQL. Wcześniej zaglądałem /Library/LaunchDaemons/i /Library/LaunchAgentsnie znalazłem pliku z mysqldjego nazwą.

Możesz również zainstalować system oparty na naparach o nazwie services, aby zarządzać wszystkimi aplikacjami usług zainstalowanymi przez Brew, jak opisano w tym poście - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I sam tego nie próbowałem, więc YMMV.

sami
źródło
2
To właśnie mnie naprawiło. Zawsze ból, gdy walczysz na wiele różnych sposobów, aby uruchomić lokalnie stos LAMP.
Patrick,
Musiałem użyć ścieżki Homebrew, aby to usunąć, tj./usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking
10

Próbowałem zabić proces, wysyłając mu TERMsygnał, i to zadziałało. Polecenie brzmiało:

sudo kill -15 {PID}
Hristo
źródło
8

Dla mnie to zadziałało, kiedy zorientowałem się, której etykiety szukam.

launchctl list | egrep {DESIRED_LABEL}   
launchctl remove {DESIRED_LABEL}
silverdagger
źródło
6

Zwolnij usługę i zatrzymaj demona:

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

Załaduj usługę i uruchom demona:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
Osaev
źródło
To działało dla mnie, z tym wyjątkiem, że com.oracle.oss.mysql.mysqld.plist Mój lokalny MySQL został zainstalowany z pobierania z MySQL, a nie przez homebrew.
Jason
2

Jaki proces próbujesz zabić? Niektóre procesy w Mac OS X (np. Dock, niektóre procesy systemowe) automatycznie odradzają się, jeśli zostaną zabite.

mipadi
źródło
Próbuję zabić mysqldproces
Hristo,
Prawdopodobnie zarządzany przez launchd, który uruchomi go ponownie, jeśli proces umrze.
mipadi
1

Rozwiązałem edycję pliku /Library/LaunchDaemons/com.mysql.mysql.plist, zmieniając atrybut true na 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>
Mario
źródło
0

Na twoim komputerze działa proces, który blokuje mysql. Biegać

ps auxwww | grep mysql

to zrób

kill -15 {PID}

Mój proces, który go blokował, to _mysql

Jonathan O
źródło