【问题标题】:Not able to kill mysql process with "kill -9 <pid>"无法使用“kill -9 <pid>”杀死mysql进程
【发布时间】:2023-03-08 06:31:01
【问题描述】:

我在 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)

mysql 进程再次启动,但 PID 不同,为什么?如何永久杀死我的 Macbook 上的 MySQL 进程?

(mysql 版本 8.0.11)

【问题讨论】:

    标签: mysql macos


    【解决方案1】:

    该进程似乎归另一个用户所有 _mysql。要杀死它,请尝试做

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

    注意

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

    【讨论】:

    • 我的意思是,矫枉过正的可能是sudo reboot -h now。在这里以 root 身份运行,您(作为计算机的超级用户)想要结束某些事情,并且知道进程正在结束,这似乎是寻找所涉及的潜在用户名的额外工作。
    【解决方案2】:

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

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

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

    如果您使用brew 或其他方式安装了 MySQL 服务器,它可能不受launchctl 管理。

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

    当使用非launchctl 方法运行MySQL 服务器时,它可能会运行mysqld_safe,这是一个脚本,如果mysqld 被杀死或崩溃,它会自动重新启动。这就是为什么你必须正确关闭mysqld_safe。

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

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

    【讨论】:

    • 通过从 macbook 的系统偏好设置中关闭 MySQL 来帮助我解决问题。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多