cómo matar el proceso en Mac OS X y no hacer que se reinicie solo

29

Cuando ejecuto sudo kill -9 [PID]con la ID de proceso adecuada, el proceso se detiene pero luego se reinicia y tiene un nuevo PID. Estoy tratando de matar el mysqldproceso.

¿Cómo puedo imitar el Monitor de actividad para matar un proceso? En el Monitor de actividad, cuando presiona "Salir del proceso", el proceso deja de ejecutarse permanentemente, se termina por completo. Me imagino que killhará lo mismo, ¿verdad?

Tenía tanto el Monitor de actividad como el terminal uno al lado del otro para ver si el comando funciona, pero cada vez que lo hago sudo kill -9 [PID], el proceso en el Monitor de actividad no desaparece, solo se actualiza con un nuevo PID.

Entonces ... ¿cómo elimino el mysqldproceso a través del terminal?

Hristo
fuente
Lo hice desde el monitor de actividad porque el comando 'kill' no estaba reconociendo el PID. Nuevamente, a diferencia de su caso, mi mysqld no se reinició tan pronto como lo eliminé del monitor de actividad.
Yoosaf Abdulla
¡Ay! No use -9 a menos que REALMENTE lo necesite. Es algo violento hacerle a un proceso. Otras señales permiten que un proceso finalice de manera ordenada, ¡pero no -9! Por lo tanto, significa que las memorias intermedias de RAM no se descargan en el disco, por ejemplo. Esto es algo particularmente malo que hacer con una base de datos que está en proceso de trabajar; volverás a las mesas dañadas.
Jan Steinman

Respuestas:

22

Probablemente , el proceso que está ejecutando está siendo administrado por launchd , la forma correcta de detenerlo y evitar que se reinicie es usarlo launchctl unload <path to plist>. La lista que controla ese proceso está en /Library/LaunchDaemonso /System/Library/LaunchDaemons. Si se trata de un proceso del sistema y no uno propio, probablemente tendrá que utilizarlo sudopara comenzar launchctla trabajar como lo desee.

Una mejor manera de tratar de detenerlo podría ser;

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

fuente
Estoy tratando de matar el mysqldproceso. No estoy seguro de si eso es parte de LaunchDaemons ... pero el siguiente comando es la forma correcta de detener la ejecución del servidor, sudo /usr/local/mysql/support-files/mysql.server stoppero tengo problemas con eso, así que estoy tratando de matar el proceso directamente.
Hristo
44
si se está reiniciando después de que kill -9el launchd esté probablemente involucrado, aunque sea indirectamente. puede decirlo usandolaunchctl list
la lista no tiene "mysql" en ella. Intentaré tu comando arriba.
Hristo
Redireccionar STDOUT y STDERR a / dev / null.
Hola71
77
Tuve el mismo problema y pude resolver eliminando mysql de launchd a través de sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff
11

Un par de comentarios mencionan que "launchd probablemente esté involucrado", así que pensé en publicar esto como una respuesta adicional. Como dice @ jarrod-roberson, puede verificar si launchd está involucrado ejecutando primero launchctl list | grep mysqld.

Una cosa importante que aprende aquí es si MySQL se instaló con Homebrew o no: Brew almacena sus launchctlarchivos en una ubicación diferente de donde OSX pone los servicios "regulares".

En mi cuadro OSX, los plistarchivos están en ~/Library/LaunchAgents/Así que ejecuté:

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

para detener el servidor MySQL. Había buscado previamente /Library/LaunchDaemons/y /Library/LaunchAgentsno encontré un archivo con mysqldsu nombre.

También puede instalar un sistema basado en brew llamado services, para administrar todas las aplicaciones de servicios instaladas en Brew, como se describe en esta publicación: http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I Sin embargo, no he probado esto, así que YMMV.

Sameers
fuente
2
Esto es lo que me arregló. Siempre es una molestia cuando luchas de varias maneras diferentes para ejecutar una pila LAMP localmente.
Patrick
Tuve que usar la ruta Homebrew para eliminar esto, es decir/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking
10

Traté de matar el proceso enviándole la TERMseñal, y funcionó. El comando fue:

sudo kill -15 {PID}
Hristo
fuente
8

Para mí, esto funcionó una vez que descubrí qué etiqueta estaba buscando.

launchctl list | egrep {DESIRED_LABEL}   
launchctl remove {DESIRED_LABEL}
daga de plata
fuente
6

Descargue el servicio y detenga el demonio:

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

Cargue el servicio e inicie el demonio:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
Osaev
fuente
Esto funcionó para mí, excepto que com.oracle.oss.mysql.mysqld.plist se instaló Mi MySQL local desde la descarga desde MySQL, no a través de homebrew.
Jason
2

¿Qué proceso estás tratando de matar? Algunos procesos en Mac OS X (por ejemplo, el Dock, algunos procesos del sistema) reaparecen automáticamente si son eliminados.

mipadi
fuente
Estoy tratando de matar el mysqldproceso
Hristo
Probablemente administrado por launchd, entonces, que lo reiniciará si el proceso se detiene.
mipadi
1

Resolví la edición del archivo /Library/LaunchDaemons/com.mysql.mysql.plist, cambiando el atributo verdadero a falso

<!--?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
fuente
0

Hay un proceso ejecutándose en su máquina que está bloqueando mysql. correr

ps auxwww | grep mysql

entonces hazlo

kill -15 {PID}

Mi proceso que lo estaba bloqueando fue _mysql

Jonathan O
fuente