web-dev-qa-db-ja.com

Mac OS Xでプロセスを強制終了し、それ自体で再起動しない方法

適切なプロセスIDを使用してSudo kill -9 [PID]を実行すると、プロセスは停止しますが、その後再起動され、新しいPIDを持ちます。 mysqldプロセスを強制終了しようとしています。

プロセスを強制終了するときにアクティビティモニターを模倣するにはどうすればよいですか?アクティビティモニターで[Quit Process]を押すと、プロセスは永久に実行を停止し、完全に終了します。私はkillが同じことを正しく行うと思いますか?

コマンドが機能するかどうかを確認するために、アクティビティモニターと端末の両方を隣に配置しましたが、Sudo kill -9 [PID]を実行するたびに、アクティビティモニターのプロセスが終了せず、新しいPIDで更新されます。

では、ターミナルを介してmysqldプロセスを終了するにはどうすればよいですか?

32
Hristo

TERMシグナルを送信してプロセスを強制終了しようとしましたが、うまくいきました。コマンドは:

Sudo kill -15 {PID}
10
Hristo

あなたが殺しているプロセスはおそらく 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
22
user22908

いくつかのコメントで、「launchdはおそらく関与している」と述べられているので、私はこれを追加の回答として提示したいと思いました。 @ jarrod-robersonが言うように、最初にlaunchctl list | grep mysqldを実行すると、launchdが関係しているかどうかを確認できます。

ここで学ぶ重要なことは、MySQLがHomebrewとともにインストールされたかどうかです。BrewはlaunchctlファイルをOSXが「通常の」サービスを配置する場所とは別の場所に保存します。

私のOSXボックスでは、plistファイルは~/Library/LaunchAgents/にあるので、実行しました:

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

mySQLサーバーを停止します。以前に/Library/LaunchDaemons//Library/LaunchAgentsを調べたことがありますが、名前にmysqldが含まれているファイルは見つかりませんでした。

この投稿で説明されているように、servicesというbrewベースのシステムをインストールして、Brewでインストールされたすべてのサービスアプリケーションを管理することもできます http://robots.thoughtbot.com/starting-and- stopping-background-services-with-homebrew 自分で試したことがないので、YMMVを使用します。

13
sameers

私にとって、これは私が探していたレーベルを見つけるとうまくいった。

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

サービスをアンロードし、デーモンを停止します。

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

サービスをロードしてデーモンを開始します。

Sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
7
Osaev

殺そうとしているプロセスは何ですか? Mac OS Xの一部のプロセス(Dock、一部のシステムプロセスなど)は、強制終了されると自動的に再起動します。

2
mipadi

/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>
1
Mario

Mysqlをブロックしているプロセスがマシン上で実行されています。走る

ps auxwww | grep mysql

それから

kill -15 {PID}

それをブロックしていた私のプロセスは_mysqlでした

0
Jonathan O