51

When I run sudo kill -9 [PID] with the proper process ID, the process stops but then is restarted and has a new PID. I'm trying to kill the mysqld process.

How can I mimic the Activity Monitor in killing a process? In the Activity Monitor, when you press "Quit Process", the process permanently stops running, it is totally terminated. I figure that kill will do the same thing right?

I had both the Activity Monitor and the terminal next to each other to see if the command works, but every time I do sudo kill -9 [PID], the process in Activity monitor doesn't go away, it just refreshes with a new PID.

So... how do I kill the mysqld process via the terminal?

ChrisF
  • 41,540
Hristo
  • 1,269

8 Answers8

34

The process you are killing is probably being managed by launchd, the proper way to stop it and have it not restart is to use launchctl unload <path to plist>. The plist that controls that process is in either /Library/LaunchDaemons or /System/Library/LaunchDaemons. If it is a system process and not one of your own, then you will probably have to use sudo to get launchctl to work as desired.

A better way try and stop it might be;

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

A couple of comments mention that "launchd is probably involved" - so I thought I'd put this out as an additional answer. As @jarrod-roberson says, you can check if launchd is involved by first running launchctl list | grep mysqld.

An important thing you learn here is whether MySQL was installed with Homebrew or not - Brew stores its launchctl files in a different location than where OSX puts the "regular" services.

On my OSX box, the plist files are in ~/Library/LaunchAgents/ So I ran:

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

to stop the MySQL server. I had previously looked in /Library/LaunchDaemons/ and /Library/LaunchAgents but didn't find a file with mysqld in its name.

You can also install a brew-based system called services, to manage all Brew-installed services applications, as described in this post - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I haven't tried this myself, though, so YMMV.

sameers
  • 361
15

For me, this worked once I figured out which label I was looking for.

launchctl list | egrep {DESIRED_LABEL}   
launchctl remove {DESIRED_LABEL}
Scott C Wilson
  • 2,454
  • 5
  • 23
  • 33
14

I tried to kill the process by sending it the TERM signal, and that worked. The command was:

sudo kill -15 {PID}
ChrisF
  • 41,540
Hristo
  • 1,269
7

Unload the service and stop the daemon:

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

Load the service and start the daemon:

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
8bittree
  • 2,958
Osaev
  • 71
  • 1
  • 1
2

I solved editing the /Library/LaunchDaemons/com.mysql.mysql.plist file, changing the attribute true to 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
  • 21
2

What process are you trying to kill? Some processes in Mac OS X (e.g., the Dock, some system processes) automatically respawn if they're killed.

mipadi
  • 4,518
0

There is a process running on your machine that is blocking mysql. Run

ps auxwww | grep mysql

then do

kill -15 {PID}

My process that was blocking it was _mysql