cara membunuh proses di Mac OS X dan tidak me-restart sendiri


29

Ketika saya menjalankan sudo kill -9 [PID]dengan ID proses yang tepat, proses berhenti tetapi kemudian dimulai kembali dan memiliki PID baru. Saya mencoba untuk membunuh mysqldprosesnya.

Bagaimana saya bisa meniru Monitor Aktivitas dalam membunuh suatu proses? Di Monitor Aktivitas, ketika Anda menekan "Keluar dari Proses", proses berhenti berjalan secara permanen, itu benar-benar dihentikan. Saya pikir itu killakan melakukan hal yang sama, kan?

Saya memiliki Monitor Aktivitas dan terminal di sebelah satu sama lain untuk melihat apakah perintah itu berfungsi, tetapi setiap kali saya melakukannya sudo kill -9 [PID], proses di Monitor aktivitas tidak hilang, hanya menyegarkan dengan PID baru.

Jadi ... bagaimana cara saya mematikan mysqldproses melalui terminal?


Saya melakukannya dari monitor aktivitas karena perintah 'kill' tidak mengenali PID. Sekali lagi tidak seperti kasus Anda mysqld saya tidak restart segera setelah saya membunuhnya dari monitor Activity
Yoosaf Abdulla

Aduh! Jangan gunakan -9 kecuali Anda BENAR-BENAR perlu. Ini hal yang kasar untuk dilakukan pada suatu proses. Sinyal lain memungkinkan proses untuk mengakhiri secara tertib, tetapi tidak -9! Jadi itu berarti buffer RAM tidak dapat mem-flush ke disk, misalnya. Ini adalah hal yang sangat buruk untuk dilakukan ke database yang sedang dalam proses melakukan pekerjaan; Anda akan kembali ke meja yang rusak.
Jan Steinman

Jawaban:


22

Proses yang Anda bunuh mungkin dikelola oleh launchd , cara yang tepat untuk menghentikannya dan tidak memulai kembali adalah menggunakan launchctl unload <path to plist>. Plist yang mengontrol proses itu ada di salah satu /Library/LaunchDaemonsatau /System/Library/LaunchDaemons. Jika ini adalah proses sistem dan bukan milik Anda sendiri, maka Anda mungkin harus menggunakan sudountuk mulai launchctlbekerja seperti yang diinginkan.

Cara yang lebih baik untuk mencoba dan menghentikannya mungkin;

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

Saya mencoba untuk membunuh mysqldprosesnya. Saya tidak yakin apakah itu bagian dari LaunchDaemons ... tetapi perintah berikut adalah cara yang benar untuk menghentikan server agar tidak berjalan, sudo /usr/local/mysql/support-files/mysql.server stoptetapi saya mengalami masalah dengan itu, jadi saya mencoba untuk mematikan proses secara langsung.
Hristo

4
jika sedang disajikan kembali setelah kill -9launchd mungkin terlibat, bahkan jika secara tidak langsung. Anda bisa tahu dengan menggunakanlaunchctl list

daftar tidak memiliki "mysql" di dalamnya. Saya akan mencoba perintah Anda di bagian atas.
Hristo

Redirect STDOUT dan STDERR ke / dev / null.
Hello71

7
Saya memiliki masalah yang sama dan dapat menyelesaikan dengan menghapus mysql dari launchd via sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Beberapa komentar menyebutkan bahwa "launchd mungkin terlibat" - jadi saya pikir saya akan mengeluarkan ini sebagai jawaban tambahan. Seperti yang dikatakan @ jarrod-roberson, Anda dapat memeriksa apakah launchd terlibat dengan menjalankan pertama kali launchctl list | grep mysqld.

Satu hal penting yang Anda pelajari di sini adalah apakah MySQL telah diinstal dengan Homebrew atau tidak - Brew menyimpan launchctlfile -nya di lokasi yang berbeda dari tempat OSX menempatkan layanan "biasa".

Di kotak OSX saya, plistfile-file itu ada di ~/Library/LaunchAgents/Jadi saya berlari:

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

untuk menghentikan server MySQL. Saya sebelumnya telah mencari /Library/LaunchDaemons/dan /Library/LaunchAgentstetapi tidak menemukan file dengan mysqldnamanya.

Anda juga dapat menginstal sistem berbasis pembuatan bir yang disebut services, untuk mengelola semua aplikasi layanan yang diinstal oleh Brew, seperti yang dijelaskan dalam posting ini - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I belum mencoba ini sendiri, jadi YMMV.


2
Inilah yang diperbaiki untuk saya. Selalu merepotkan saat Anda berjuang berbagai cara untuk menjalankan tumpukan LAMP secara lokal.
Patrick

Saya harus menggunakan jalur Homebrew untuk menghapus ini, yaitu/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking

10

Saya mencoba untuk mematikan proses dengan mengirimkan TERMsinyal, dan itu berhasil. Perintahnya adalah:

sudo kill -15 {PID}

8

Bagi saya, ini berhasil setelah saya mengetahui label mana yang saya cari.

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

6

Bongkar layanan dan hentikan daemon:

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

Muat layanan dan mulai daemon:

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

Ini bekerja untuk saya kecuali itu adalah com.oracle.oss.mysql.mysqld.plist MySQL lokal saya diinstal dari pengunduhan dari MySQL, bukan melalui homebrew.
Jason

2

Proses apa yang ingin Anda bunuh? Beberapa proses di Mac OS X (misalnya, Dock, beberapa proses sistem) secara otomatis respawn jika mereka terbunuh.


Saya mencoba untuk menghentikan mysqldproses
Hristo

Mungkin dikelola oleh launchd, yang akan memulai kembali jika proses mati.
mipadi

1

Saya memecahkan pengeditan file /Library/LaunchDaemons/com.mysql.mysql.plist, mengubah atribut true menjadi 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

Ada proses yang berjalan pada mesin Anda yang memblokir mysql. Menjalankan

ps auxwww | grep mysql

lalu lakukan

kill -15 {PID}

Proses saya yang memblokirnya adalah _mysql

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.