如何在Mac OS X中终止进程而不自行重启


29

当我sudo kill -9 [PID]使用正确的进程ID 运行时,该进程将停止,但随后将重新启动并具有新的PID。我正试图终止这一mysqld过程。

在终止进程时如何模仿活动监视器?在活动监视器中,当您按“退出进程”时,该进程将永久停止运行,并完全终止。我认为kill这样做会正确吗?

我使活动监视器和终端彼此相邻,以查看命令是否有效,但是每次执行此操作时sudo kill -9 [PID],活动监视器中的进程都不会消失,它只会刷新一个新的PID。

那么...如何mysqld通过终端取消进程?


我是从活动监视器执行此操作的,因为“ kill”命令无法识别PID。再次与您的情况不同,我从活动监视器中杀死它后,mysqld并没有重新启动。
Yoosaf Abdulla

哎哟! 除非确实需要,否则不要使用-9。对流程进行处理是很暴力的事情。其他信号允许进程有序地终止,但不能-9!因此,例如,这意味着RAM缓冲区不会刷新到磁盘。对于正在工作的数据库来说,这是一件特别糟糕的事情。您会回到损坏的桌子上。
Jan Steinman

Answers:


22

您正在杀死的进程可能是由launchd管理的,使用停止它并使其不重新启动的正确方法是使用launchctl unload <path to plist>。控制该过程的plist位于/Library/LaunchDaemons或中/System/Library/LaunchDaemons。如果这是一个系统过程,而不是您自己的过程,那么您可能必须习惯使用sudo它才能launchctl开始工作。

尝试阻止它的更好方法是;

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

我正试图终止这一mysqld过程。我不确定这是否是LaunchDaemons的一部分...但是以下命令是停止服务器运行的正确方法,sudo /usr/local/mysql/support-files/mysql.server stop但是我遇到了问题,因此我尝试直接终止该进程。
赫里斯托斯

4
是否kill -9可能在启动后重新声明了它,即使是间接的也是如此。您可以使用launchctl list

该列表中没有“ mysql”。我会尝试您的命令。
赫里斯特

将STDOUT和STDERR重定向到/ dev / null。
Hello71

7
我遇到了同样的问题,并且能够通过以下方式删除mysql来解决: sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

有几条评论提到“可能涉及启动”-所以我认为我将其作为其他答案。正如@ jarrod-roberson所说,您可以通过首次运行检查启动是否涉及启动launchctl list | grep mysqld

您在这里学到的重要一件事是MySQL是否与Homebrew一起安装-Brew将其launchctl文件存储在与OSX放置“常规”服务的位置不同的位置。

在我的OSX盒子上,plist文件在,~/Library/LaunchAgents/所以我跑了:

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

停止MySQL服务器。我以前曾浏览过/Library/LaunchDaemons//Library/LaunchAgents但没有找到mysqld名称相同的文件。

您还可以安装一个名为的基于servicesBrew的系统,以管理所有Brew安装的服务应用程序,如本博文所述-http: //robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I不过,我自己还没有尝试过,所以YMMV。


2
这就是为我解决的问题。当您以多种不同的方式在本地运行LAMP堆栈时,总是很痛苦。
Patrick

我必须使用Homebrew路径将其删除,即/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking

10

我试图通过向其发送TERM信号来终止该过程,但是这样做确实可行。命令是:

sudo kill -15 {PID}

8

对我来说,一旦我确定了要寻找的标签,此方法就会奏效。

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

6

卸载服务并停止守护程序:

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

加载服务并启动守护程序:

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

这对我有用,除了那是com.oracle.oss.mysql.mysqld.plist 我的本地MySQL是从MySQL下载而不是通过自制软件安装的。
杰森

2

您想杀死什么进程?如果Mac OS X中的某些进程(例如Dock,某些系统进程)被杀死,则会自动重新生成。


我正试图mysqld
终止

launchd然后,可能由进行管理,如果进程终止,它将重新启动它。
mipadi

1

我解决了编辑/Library/LaunchDaemons/com.mysql.mysql.plist文件的问题,将属性true更改为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

您的计算机上正在运行一个阻止mysql的进程。跑

ps auxwww | grep mysql

然后做

kill -15 {PID}

我阻止它的进程是_mysql

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.