come interrompere il processo in Mac OS X e non riavviarlo da solo


29

Quando eseguo sudo kill -9 [PID]l'ID processo corretto, il processo si interrompe ma viene riavviato e ha un nuovo PID. Sto cercando di uccidere il mysqldprocesso.

Come posso imitare Activity Monitor nell'uccidere un processo? In Activity Monitor, quando si preme "Esci da processo", il processo si interrompe in modo permanente, viene completamente interrotto. Immagino che killfarà la stessa cosa, giusto?

Avevo sia Activity Monitor che il terminale uno accanto all'altro per vedere se il comando funzionava, ma ogni volta che lo faccio sudo kill -9 [PID], il processo in Activity Monitor non va via, si aggiorna solo con un nuovo PID.

Quindi ... come posso interrompere il mysqldprocesso tramite il terminale?


L'ho fatto dal monitor attività perché il comando 'kill' non riconosceva il PID. Ancora una volta, a differenza del tuo caso, il mio mysqld non si è riavviato non appena l'ho ucciso dal monitor Attività.
Yoosaf Abdulla,

Ahia! Non usare -9 a meno che NON sia VERAMENTE necessario. È una cosa violenta da fare in un processo. Altri segnali consentono a un processo di terminare in modo ordinato, ma non -9! Quindi, ad esempio, i buffer RAM non vengono scaricati sul disco. Questa è una cosa particolarmente brutta da fare per un database che sta lavorando; tornerai ai tavoli danneggiati.
Jan Steinman,

Risposte:


22

Il processo che stai uccidendo è probabilmente gestito da launchd , il modo corretto per fermarlo e non riavviarlo è quello di usarlo launchctl unload <path to plist>. Il plist che controlla quel processo è in /Library/LaunchDaemonso /System/Library/LaunchDaemons. Se si tratta di un processo di sistema e non uno dei tuoi, probabilmente dovrai utilizzare sudoper andare launchctla lavorare come desiderato.

Un modo migliore per provare a fermarlo potrebbe essere;

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

Sto cercando di uccidere il mysqldprocesso. Non sono sicuro che faccia parte di LaunchDaemons ... ma il seguente comando è il modo corretto di interrompere l'esecuzione del server, sudo /usr/local/mysql/support-files/mysql.server stopma sto riscontrando problemi, quindi sto cercando di interrompere direttamente il processo.
Hristo,

4
se viene riformulato dopo kill -9il lancio è probabilmente coinvolto, anche se indirettamente. puoi dirlo usandolaunchctl list

l'elenco non contiene "mysql". Proverò il tuo comando in alto.
Hristo,

Reindirizzare STDOUT e STDERR su / dev / null.
Ciao,

7
Ho avuto lo stesso problema e sono stato in grado di risolverlo rimuovendo mysql dal lancio tramite sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Un paio di commenti menzionano che "probabilmente è coinvolto launchd", quindi ho pensato di pubblicarlo come risposta aggiuntiva. Come dice @ jarrod-roberson, puoi verificare se launchd è coinvolto eseguendo prima launchctl list | grep mysqld.

Una cosa importante che impari qui è se MySQL è stato installato con Homebrew o meno: Brew memorizza i suoi launchctlfile in una posizione diversa rispetto a dove OSX mette i servizi "regolari".

Sulla mia casella OSX, i plistfile sono in ~/Library/LaunchAgents/Così ho eseguito:

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

per arrestare il server MySQL. In precedenza avevo cercato /Library/LaunchDaemons/e /Library/LaunchAgentsnon avevo trovato un file con il mysqldsuo nome.

È inoltre possibile installare un sistema basato su brew chiamato services, per gestire tutte le applicazioni di servizi installati da Brew, come descritto in questo post: http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I non ho provato questo, però, quindi YMMV.


2
Questo è ciò che l'ha risolto per me. Sempre un dolore quando si combattono diversi modi per eseguire uno stack LAMP localmente.
Patrick,

Ho dovuto usare il percorso Homebrew per rimuovere questo, cioè/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking il

10

Ho provato a interrompere il processo inviandogli il TERMsegnale e ha funzionato. Il comando era:

sudo kill -15 {PID}

8

Per me, ha funzionato una volta che ho capito quale etichetta stavo cercando.

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

6

Scarica il servizio e ferma il demone:

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

Carica il servizio e avvia il demone:

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

Questo ha funzionato per me, tranne per il fatto che il com.oracle.oss.mysql.mysqld.plist mio MySQL locale è stato installato dal download da MySQL, non tramite homebrew.
Jason,

2

Quale processo stai cercando di uccidere? Alcuni processi in Mac OS X (ad es. Dock, alcuni processi di sistema) si rigenerano automaticamente se vengono uccisi.


Sto cercando di uccidere il mysqldprocesso
Hristo,

Probabilmente gestito da launchd, quindi, che lo riavvierà se il processo termina.
mipadi,

1

Ho risolto la modifica del file /Library/LaunchDaemons/com.mysql.mysql.plist, cambiando l'attributo true in 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

C'è un processo in esecuzione sul tuo computer che sta bloccando mysql. Correre

ps auxwww | grep mysql

Quindi fa

kill -15 {PID}

Il mio processo che lo stava bloccando era _mysql

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.