how to kill process in Mac OS X and not have it restart on its own

29

19

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?

Hristo

Posted 2010-07-02T16:35:03.290

Reputation: 869

Ouch! Don't use -9 unless you REALLY need to. It's a violent thing to do to a process. Other signals allow a process to terminate in an orderly manner, but not -9! So it means that RAM buffers don't get flushed to disk, for example. This is a particularly bad thing to do to a database that is in the process of doing work; you'll come back to damaged tables. – Jan Steinman – 2018-03-04T02:21:13.177

I did it from the activity monitor because the 'kill' command was not recognising the PID. Again unlike your case my mysqld did not restart as soon as I killed it from the Activity monitor. – Yoosaf Abdulla – 2013-09-28T13:46:13.923

Answers

10

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

sudo kill -15 {PID}

Hristo

Posted 2010-07-02T16:35:03.290

Reputation: 869

22

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

user22908

Posted 2010-07-02T16:35:03.290

Reputation:

7I had the same problem and was able to solve by removing mysql from launchd via

sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist – Jeff – 2015-09-08T13:21:17.397

I'm trying to kill the mysqld process. I'm not sure if that is part of LaunchDaemons... but the following command is the correct way to stop the server from running sudo /usr/local/mysql/support-files/mysql.server stop but I'm having problems with that, so I'm trying to kill the process directly. – Hristo – 2010-07-02T16:44:23.733

4if it is being restated after kill -9 the launchd is probably involved, even if indirectly. you can tell by using launchctl list – None – 2010-07-02T16:56:31.063

the list doesn't have "mysql" in it. I will try your command up top. – Hristo – 2010-07-02T17:02:15.793

Redirect STDOUT and STDERR to /dev/null. – Hello71 – 2010-07-02T17:56:11.933

Using -15 as a flag opposed to -9 did the job. Thanks for your response! – Hristo – 2010-07-02T19:25:50.750

The launchd link is now broken. – Denis Kniazhev – 2017-03-01T08:38:27.600

I can see com.oracle.oss.mysql.mysqld.plist in /Library/LaunchDaemons and have used the command sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist only to receive the error message: Could not find specified service – Christia – 2017-03-27T21:33:38.727

11

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

Posted 2010-07-02T16:35:03.290

Reputation: 221

2This is what fixed it for me. Always a pain when you are fighting multiple different ways to run a LAMP stack locally. – Patrick – 2016-03-15T14:59:00.953

I had to use the Homebrew path to remove this, i.e. /usr/local/opt/mysql/homebrew.mxcl.mysql.plist – micjamking – 2017-01-14T23:10:11.317

8

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

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

silverdagger

Posted 2010-07-02T16:35:03.290

Reputation: 181

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

Osaev

Posted 2010-07-02T16:35:03.290

Reputation: 71

This worked for me except that is was com.oracle.oss.mysql.mysqld.plist My local MySQL was installed from downloading from MySQL, not via homebrew. – Jason – 2015-11-12T18:26:06.977

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

Posted 2010-07-02T16:35:03.290

Reputation: 3 980

I'm trying to kill the mysqld process – Hristo – 2010-07-02T16:43:16.797

Probably managed by launchd, then, which will restart it if the process dies. – mipadi – 2010-07-02T17:25:27.077

1

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

Posted 2010-07-02T16:35:03.290

Reputation: 11

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

Jonathan O

Posted 2010-07-02T16:35:03.290

Reputation: 11