como matar o processo no Mac OS X e não reiniciá-lo por conta própria

29

Quando executo sudo kill -9 [PID]com o ID do processo adequado, o processo para, mas é reiniciado e tem um novo PID. Estou tentando matar o mysqldprocesso.

Como posso imitar o Monitor de Atividade para matar um processo? No Monitor de Atividade, quando você pressiona "Sair do Processo", o processo para de ser executado permanentemente, é totalmente encerrado. Eu acho que killvai fazer a mesma coisa, certo?

Eu tinha o Activity Monitor e o terminal próximos um do outro para ver se o comando funciona, mas toda vez que faço sudo kill -9 [PID], o processo no Activity Monitor não desaparece, apenas é atualizado com um novo PID.

Então ... como eu mato o mysqldprocesso através do terminal?

Hristo
fonte
Fiz isso no monitor de atividades porque o comando 'kill' não estava reconhecendo o PID. Mais uma vez, diferente do seu caso, o mysqld não foi reiniciado assim que o matei no monitor de atividades.
Yoosaf Abdulla 28/09
Ai! Não use -9, a menos que você realmente precise. É uma coisa violenta a se fazer em um processo. Outros sinais permitem que um processo termine de maneira ordenada, mas não -9! Portanto, significa que os buffers de RAM não são liberados para o disco, por exemplo. Isso é particularmente ruim para um banco de dados que está em processo de execução de trabalho; você voltará para as tabelas danificadas.
Jan Steinman

Respostas:

22

O processo que você está matando provavelmente está sendo gerenciado pelo launchd , a maneira correta de pará-lo e não reiniciá-lo é usá-lo launchctl unload <path to plist>. A lista que controla esse processo está em /Library/LaunchDaemonsou /System/Library/LaunchDaemons. Se for um processo do sistema e não um dos seus, provavelmente você precisará usar sudopara começar launchctla trabalhar conforme desejado.

Pode ser uma maneira melhor de tentar parar;

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

fonte
Estou tentando matar o mysqldprocesso. Não tenho certeza se isso faz parte do LaunchDaemons ... mas o comando a seguir é a maneira correta de interromper a execução do servidor, sudo /usr/local/mysql/support-files/mysql.server stopmas estou tendo problemas com isso, então estou tentando matar o processo diretamente.
Hristo
4
se estiver sendo reapresentado após kill -9o lançamento provavelmente está envolvido, mesmo que indiretamente. você pode dizer usandolaunchctl list
a lista não possui "mysql". Vou tentar o seu comando lá em cima.
Hristo
Redirecione STDOUT e STDERR para / dev / null.
Hello71
7
Eu tive o mesmo problema e foi capaz de resolver através da remoção de mysql do launchd via sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff
11

Alguns comentários mencionam que "o launchd provavelmente está envolvido" - então pensei em colocar isso como uma resposta adicional. Como @ jarrod-roberson diz, você pode verificar se o launchd está envolvido executando pela primeira vez launchctl list | grep mysqld.

Uma coisa importante que você aprende aqui é se o MySQL foi instalado ou não com o Homebrew - o Brew armazena seus launchctlarquivos em um local diferente daquele em que o OSX coloca os serviços "regulares".

Na minha caixa OSX, os plistarquivos estão em ~/Library/LaunchAgents/Então eu corri:

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

para parar o servidor MySQL. Eu já havia consultado /Library/LaunchDaemons/e /Library/LaunchAgentsnão encontrei um arquivo com mysqldesse nome.

Você também pode instalar um sistema baseado em brew chamado services, para gerenciar todos os aplicativos de serviços instalados pelo Brew, conforme descrito nesta publicação - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I ainda não tentei isso sozinho, então YMMV.

sameers
fonte
2
Foi isso que o corrigiu para mim. Sempre é um problema quando você está enfrentando várias maneiras diferentes de executar uma pilha LAMP localmente.
Patrick
Eu tive que usar o caminho Homebrew para remover isso, ou seja,/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking
10

Tentei interromper o processo enviando o TERMsinal, e isso funcionou. O comando foi:

sudo kill -15 {PID}
Hristo
fonte
8

Para mim, isso funcionou depois que eu descobri qual rótulo estava procurando.

launchctl list | egrep {DESIRED_LABEL}   
launchctl remove {DESIRED_LABEL}
punhal de prata
fonte
6

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
Osaev
fonte
Isso funcionou para mim, exceto que com.oracle.oss.mysql.mysqld.plist o MySQL local foi instalado a partir do download do MySQL, não via homebrew.
Jason
2

Que processo você está tentando matar? Alguns processos no Mac OS X (por exemplo, Dock, alguns processos do sistema) reaparecem automaticamente se forem mortos.

mipadi
fonte
Estou tentando matar o mysqldprocesso
Hristo
Provavelmente gerenciado por launchd, então, que o reiniciará se o processo morrer.
Mipadi
1

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>
Mario
fonte
0

Existe um processo em execução na sua máquina que está bloqueando o mysql. Corre

ps auxwww | grep mysql

então faça

kill -15 {PID}

Meu processo que estava bloqueando era _mysql

Jonathan O
fonte