Eu tentei matar o processo enviando o sinal TERM
, e isso funcionou. O comando foi:
sudo kill -15 {PID}
Quando executo sudo kill -9 [PID]
com o ID de processo adequado, o processo é interrompido, mas depois é reiniciado e tem um novo PID. Estou tentando matar o processo mysqld
.
Como posso imitar o Activity Monitor ao eliminar um processo? No Activity Monitor, quando você pressiona "Quit Process", o processo para de funcionar permanentemente, ele é totalmente terminado. Eu acho que kill
vai fazer a mesma coisa né?
Eu tinha o Activity Monitor e o terminal lado a lado para ver se o comando funciona, mas toda vez que faço sudo kill -9 [PID]
, o processo no Activity monitor não desaparece, ele apenas é atualizado com um novo PID .
Então ... como eu mato o processo mysqld
via terminal?
O processo que você está matando provavelmente está sendo gerenciado por launchd , a maneira correta de pará-lo e tê-lo não reiniciar é usar launchctl unload <path to plist>
. O plist que controla esse processo está em /Library/LaunchDaemons
ou /System/Library/LaunchDaemons
. Se for um processo do sistema e não um dos seus, provavelmente será necessário usar sudo
para obter launchctl
para funcionar conforme desejado.
Uma maneira melhor de tentar pará-lo pode ser:
${MYSQL_HOME}/bin/mysqladmin -u root -proot shutdown > /dev/null 2>&1
Alguns comentários mencionam que "o launchd provavelmente está envolvido" - por isso pensei em colocar isso como uma resposta adicional. Como o @ jarrod-roberson diz, você pode verificar se o launchd está envolvido executando primeiro launchctl list | grep mysqld
.
Uma coisa importante que você aprende aqui é se o MySQL foi instalado com o Homebrew ou não - Brew armazena seus arquivos launchctl
em um local diferente daquele onde o OSX coloca os serviços "regulares".
Na minha caixa OSX, os arquivos plist
estão em ~/Library/LaunchAgents/
Então eu corri:
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
para parar o servidor MySQL. Eu tinha visto anteriormente em /Library/LaunchDaemons/
e /Library/LaunchAgents
, mas não encontrei um arquivo com mysqld
em seu nome.
Você também pode instalar um sistema baseado em distribuição chamado services
, para gerenciar todos os aplicativos de serviços instalados pelo Brew, conforme descrito neste post - link Eu não tentei isso sozinho, então, então YMMV.
Descarregue o serviço e pare o daemon:
sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysql.plist
Carregue o serviço e inicie o daemon:
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
Para mim, isso funcionou uma vez que eu descobri qual rótulo eu estava procurando.
launchctl list | egrep {DESIRED_LABEL}
launchctl remove {DESIRED_LABEL}
Qual processo você está tentando matar? Alguns processos no Mac OS X (por exemplo, o Dock, alguns processos do sistema) reaparecem automaticamente se forem mortos.
Eu resolvi editar o arquivo /Library/LaunchDaemons/com.mysql.mysql.plist, alterando o atributo true para 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>
Existe um processo em execução na sua máquina que está bloqueando o mysql. Executar
ps auxwww | grep mysql
faça
kill -15 {PID}
Meu processo que estava bloqueando foi _mysql