як вбити процес у Mac OS X і не перезапустити його самостійно


29

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

Як я можу імітувати Монітор активності при знищенні процесу? У Моніторі діяльності, коли ви натискаєте "Вийти з процесу", процес постійно припиняється, він повністю припиняється. Я думаю, що killзробить те саме, що правильно?

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

Отже ... як я вбиваю mysqldпроцес через термінал?


Я зробив це з монітора активності, оскільки команда 'kill' не розпізнавала PID. Знову на відміну від вашого випадку, мій mysqld не перезапустився, як тільки я його вбив з монітора активності.
Йосаф Абдулла

Ой! Не використовуйте -9, якщо вам НЕ ВІДПОВІДНО. Це жорстоко робити до процесу. Інші сигнали дозволяють завершити процес впорядковано, але не -9! Це означає, що, наприклад, буфери оперативної пам'яті не потрапляють на диск. Це особливо погано робити в базі даних, яка знаходиться в процесі роботи; ви повернетесь до пошкоджених столів.
Ян Штейнман

Відповіді:


22

Процес, який ви вбиваєте, ймовірно, керується запуском , використовувати правильний спосіб його зупинити і не перезапустити launchctl unload <path to plist>. Пліст, який керує цим процесом, знаходиться в будь-якому /Library/LaunchDaemonsабо /System/Library/LaunchDaemons. Якщо це системний процес , а не один з ваших, то ви, ймовірно , доведеться використовувати , sudoщоб launchctlпрацювати , як хотілося б .

Кращий спосіб спробувати зупинити це;

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

Я намагаюся вбити mysqldпроцес. Я не впевнений, чи це частина LaunchDaemons ... але наступна команда - це правильний спосіб зупинити роботу сервера, sudo /usr/local/mysql/support-files/mysql.server stopале у мене виникають проблеми з цим, тому я намагаюся вбити процес безпосередньо.
Христо

4
якщо він перезапускається після kill -9запуску, ймовірно, задіяний, навіть якщо побічно. ви можете сказати, скориставшисьlaunchctl list

у списку немає "mysql". Я спробую твою команду зверху.
Христо

Перенаправити STDOUT та STDERR на / dev / null.
Привіт71

7
У мене була така ж проблема, яку вдалося вирішити, видаливши mysql з запуску через sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Кілька коментарів згадують, що "запуск, ймовірно, задіяний" - тому я подумав, що висуну це як додаткову відповідь. Як говорить @ jarrod-roberson, ви можете перевірити, чи запускається запуск, попередньо запустившись 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в його назві.

Ви також можете встановити систему, засновану на варінні, звану services, щоб керувати всіма додатками, встановленими Brew, як описано в цій публікації - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I я сам не пробував цього, хоча YMMV.


2
Це те, що зафіксувало це для мене. Завжди боліть, коли ви боретеся безлічі різних способів локально запустити стек LAMP.
Патрік

Щоб видалити це, мені довелося скористатися /usr/local/opt/mysql/homebrew.mxcl.mysql.plist
домом для домашнього перекладу

10

Я намагався вбити процес, передаючи йому TERMсигнал, і це спрацювало. Команда була:

sudo kill -15 {PID}

8

Для мене це спрацювало, як тільки я зрозумів, яку етикетку шукаю.

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

6

Вивантажте послугу та зупиніть демон:

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

Завантажте сервіс та запустіть демон:

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

Це працювало для мене, за винятком того, що com.oracle.oss.mysql.mysqld.plist мій локальний MySQL був встановлений із завантаження з MySQL, а не через homebrew.
Джейсон

2

Який процес ви намагаєтеся вбити? Деякі процеси в Mac OS X (наприклад, Dock, деякі системні процеси) автоматично відновлюються, якщо їх вбивають.


Я намагаюся вбити mysqldпроцес
Христо

Можливо, керує launchdтоді, який перезапустить його, якщо процес загине.
mipadi

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.