24

Когда я запускаю sudo kill -9 [PID] с правильным идентификатором процесса, процесс останавливается, но затем перезапускается и получает новый PID. Я пытаюсь убить процесс mysqld .

Как я могу имитировать Монитор активности при уничтожении процесса? В Мониторе активности, когда вы нажимаете "Выйти из процесса", процесс постоянно останавливается, он полностью завершается. Я полагаю, что kill будет делать то же самое, верно?

У меня были и монитор активности, и терминал рядом друг с другом, чтобы посмотреть, работает ли команда, но каждый раз, когда я делаю sudo kill -9 [PID] , процесс в мониторе активности не исчезает, он просто обновляется с новым PID.

Итак ... как мне убить процесс mysqld через терминал?

8 ответов8

20

Процесс, который вы убиваете, вероятно, управляется launchd, правильный способ остановить его и не перезапускать - это использовать launchctl unload <path to plist> . Список управления этим процессом находится в /Library/LaunchDaemons или /System/Library/LaunchDaemons . Если это системный процесс, а не ваш, то вам, вероятно, придется использовать sudo чтобы запустить launchctl как вам нужно.

Лучший способ попытаться остановить это может быть;

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

В паре комментариев упоминается, что «вероятно, задействован launchd» - поэтому я подумал, что это будет дополнительным ответом. Как говорит @ jarrod-roberson, вы можете проверить, участвует ли launchd, сначала запустив launchctl list | grep mysqld .

Здесь важно узнать, был ли MySQL установлен с Homebrew или нет - Brew хранит свои файлы launchctl в другом месте, чем то, куда OSX помещает "обычные" службы.

На моем OSX поле, то plist файлы находятся в ~/Library/LaunchAgents/ Так что я побежал:

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

остановить сервер MySQL. Ранее я просматривал /Library/LaunchDaemons/ и /Library/LaunchAgents но не нашел файл с именем mysqld .

Вы также можете установить систему на основе brew, называемую services , для управления всеми приложениями, установленными на Brew, как описано в этом посте - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew Я сам этого не пробовал, так что, YMMV.

7

Я попытался убить процесс, отправив ему сигнал TERM , и это сработало. Команда была:

sudo kill -15 {PID}
5

Выгрузите службу и остановите демон:

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

Загрузите сервис и запустите демон:

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

Для меня это сработало, когда я понял, какой лейбл я искал.

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

Какой процесс вы пытаетесь убить? Некоторые процессы в Mac OS X (например, Dock, некоторые системные процессы) автоматически возрождаются, если они убиты.

1

Я решил отредактировать файл /Library/LaunchDaemons/com.mysql.mysql.plist, изменив атрибут true на 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

На вашем компьютере запущен процесс, блокирующий mysql. Бежать

ps auxwww | grep mysql

тогда делай

kill -15 {PID}

Мой процесс, который блокировал это был _mysql

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .