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


29

sudo kill -9 [PID]適切なプロセスIDで実行すると、プロセスは停止しますが、再起動され、新しいPIDが設定されます。mysqldプロセスを強制終了しようとしています。

プロセスを強制終了する際にアクティビティモニターを模倣するにはどうすればよいですか?アクティビティモニターで「プロセスの終了」を押すと、プロセスの実行が永久に停止し、完全に終了します。Iフィギュアkill同じ事の権利をしますか?

コマンドが機能するかどうかを確認するためにアクティビティモニターとターミナルの両方を並べましたが、実行するたびにsudo kill -9 [PID]、アクティビティモニターのプロセスは消えず、新しいPIDで更新されます。

だから... mysqldターミナル経由でプロセスを強制終了するにはどうすればよいですか?


「kill」コマンドがPIDを認識していなかったため、アクティビティモニターから実行しました。繰り返しますが、私の場合とは異なり、mysqldはアクティビティモニターから削除した直後に再起動しませんでした。
Yoosafアブドゥッラ

痛い!本当に必要な場合を除き、-9は使用しないでください。プロセスに対して行うのは暴力的なことです。他のシグナルを使用すると、プロセスを正常に終了できますが、-9では終了できません!つまり、たとえばRAMバッファーがディスクにフラッシュされないことを意味します。これは、作業中のデータベースに対して特に悪いことです。破損したテーブルに戻ります。
ヤンスタインマン

回答:


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間接的であっても、launchdが関与した後に再修正される場合。を使用して伝えることができますlaunchctl list

リストには「mysql」が含まれていません。あなたのコマンドを上で試してみます。
フリスト

STDOUTおよびSTDERRを/ dev / nullにリダイレクトします。
Hello71

7
私は同じ問題を抱えていたし、経由のlaunchdからMySQLを削除することで解決することができました sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
ジェフ

11

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

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

私のOSXボックスでは、plistファイルは次のようになっています~/Library/LaunchAgents/

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

MySQLサーバーを停止します。私は以前に見ていた/Library/LaunchDaemons/し、/Library/LaunchAgentsしかしを持つファイルが見つかりませんでしたmysqld名前にします。

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


2
これは私のためにそれを修正したものです。LAMPスタックをローカルで実行するために複数の異なる方法で戦っているときは常に苦痛です。
パトリック

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はhomebrewではなくMySQLからのダウンロードからインストールされました。
ジェイソン

2

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


mysqldプロセスを殺そうとしています
フリスト

おそらくによって管理されlaunchd、プロセスが停止すると再起動します。
ミパディ

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でした

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.