无法使用“ kill -9 <pid>”

时间:2019-02-07 13:57:59

标签: mysql macos

我在Macbook上,在终端上,我尝试查找哪个应用占用了端口3306。我运行命令:

sudo lsof -i TCP:3306 

我得到了输出:

COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  47730 _mysql   19u  IPv6 0x736b0ff006adfb97      0t0  TCP *:mysql (LISTEN)

然后,我用sudo kill -9 47730终止了该进程。它执行没有错误。

但是然后,我再次运行sudo lsof -i TCP:3306,我得到了:

COMMAND   PID   USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  47759 _mysql   19u  IPv6 0x736b0ff006ae0cd7      0t0  TCP *:mysql (LISTEN)

使用不同的PID重新启动mysql进程,为什么?如何在Macbook上永久终止MySQL进程?

(mysql版本8.0.11)

2 个答案:

答案 0 :(得分:1)

阅读https://dev.mysql.com/doc/refman/8.0/en/osx-installation-launchd.html

MacOS上的MySQL Server配置为启动守护程序,并启用了“ KeepAlive”选项。这意味着如果停止运行,例如当您使用kill -9时,MacOS将自动重启它。

您应该使用“系统偏好设置”小部件(显示在我链接到的手册页上)或launchctl停止它。

如果您使用brew或通过其他方式安装了MySQL Server,则它可能不受launchctl的管理。

例如,某些人使用supervisord来运行MySQL Server,在这种情况下,您可以使用supervisorctl stop mysql来停止它。

使用非启动方法运行MySQL Server时,它可能正在运行mysqld_safe,这是一个脚本,如果被杀死或崩溃,它将自动重新启动mysqld。这就是为什么您必须正确关闭mysqld_safe的原因。

当我在Macbook上运行MySQL Server的测试实例时,我用dbdeployer启动它们,这会启动mysqld_safe进程。

对于OSS,MacOS可能是一个令人困惑的环境,因为有多种获取和运行它的方法,并且每种都有其自己的管理过程的方法。

答案 1 :(得分:0)

该过程似乎由另一个用户拥有 _mysql。要杀死它,请尝试

sudo -u _mysql -c kill -9 47730
  • -u适用于用户
  • -c用于命令

注意

  • 如果这样不起作用,您可以随时尝试sudo kill -9 47730(以root身份运行,但这有点过头了)
  • 此外,由于您使用的是 Mac ,因此您可以尝试brew services stop mysql来更正常地关闭该服务。那就是如果您使用的是homebrew