Mac OS X'te işlemi nasıl sonlandırabilir ve kendi başına yeniden başlatamaz


29

sudo kill -9 [PID]Uygun işlem kimliğiyle çalıştırdığımda , işlem duruyor ancak yeniden başlatılıyor ve yeni bir PID'ye sahip. mysqldSüreci öldürmeye çalışıyorum .

Faaliyet İzleyicisini bir süreci öldürmede nasıl taklit edebilirim? Etkinlik İzleyicisi'nde, "İşlemden Çık" düğmesine bastığınızda, işlem kalıcı olarak durur, işlem tamamen sona erer. Ben rakam killaynı şey hakkını yapacak?

Komutun işe yarayıp yaramadığını görmek için hem Aktivite Monitörü hem de terminalin yanında bulundum, ancak her yaptığımda sudo kill -9 [PID], Aktivite monitörü'ndeki işlem bitmiyor, sadece yeni bir PID ile yenileniyor.

Öyleyse ... mysqldterminalden işlemi nasıl öldürebilirim ?


Aktivite izleyiciden yaptım çünkü 'kill' komutu PID'yi tanımıyordu. Yine senin durumundan farklı olarak, mysqld'im, Aktivite monitöründen öldürdüğümde yeniden başlamadı.
Yoosaf Abdulla

Ah! Gerçekten gerekmedikçe -9 kullanmayın. Bir sürece yapılacak şiddetli bir şey. Diğer sinyaller bir işlemin düzenli bir şekilde bitmesine izin verir, fakat -9! Bu, örneğin RAM tamponlarının diske atılmadığı anlamına gelir. Bu, iş yapma sürecinde olan bir veritabanına yapılacak özellikle kötü bir şeydir; hasarlı masalara geri döneceksiniz.
Jan Steinman

Yanıtlar:


22

Eğer öldürüyor süreç muhtemelen tarafından yönetiliyorsa launchd , uygun yolu bunu durdurmak ve onu yeniden başlatma kullanmaktır değil sahip olmak launchctl unload <path to plist>. Bu süreci kontrol eden pist ya da /Library/LaunchDaemonsya /System/Library/LaunchDaemons. Bu bir sistem süreci ise ve kendinize ait değilse , istediğiniz şekilde çalışmak için kullanmanız sudogerekecek launchctl.

Daha iyi bir yol denemek ve durdurmak olabilir;

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

mysqldSüreci öldürmeye çalışıyorum . Bunun LaunchDaemons'un bir parçası olup olmadığından emin değilim ... ancak aşağıdaki komut sunucunun çalışmasını durdurmanın doğru yoludur, sudo /usr/local/mysql/support-files/mysql.server stopancak bununla ilgili sorun yaşıyorum, bu yüzden işlemi doğrudan öldürmeye çalışıyorum.
Hristo,

4
kill -9lansman yapıldıktan sonra yeniden düzenleniyorsa , dolaylı olsa bile, muhtemelen dahil edilir. kullanarak anlatabilirsinizlaunchctl list

Listede "mysql" yok. Emrinizi yukarıdan deneyeceğim.
Hristo

STDOUT ve STDERR komutlarını / dev / null konumuna yönlendirin.
Merhaba71

7
Ben de aynı problemi yaşadım ve mysql'i lansmandan çıkartarak çözebildim sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Birkaç yorumda "lanse muhtemelen dahil" den bahsediyor - bu yüzden ek bir cevap olarak ortaya koyacağımı düşündüm. @ Jarrod-roberson'ın dediği gibi, fırlatma işleminin ilk önce koştuğunu kontrol edin launchctl list | grep mysqld.

Burada öğrendiğiniz önemli bir şey, MySQL'in Homebrew ile birlikte kurulup kurulmadığıdır - Brew, launchctldosyalarını OSX'in "normal" hizmetleri verdiği yerden farklı bir yerde saklar .

Benim OSX kutumda, plistdosyalar şu ~/Library/LaunchAgents/yüzden koştum:

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

MySQL sunucusunu durdurmak için. Daha önce de bakmış /Library/LaunchDaemons/ve /Library/LaunchAgentsancak bir dosyayı bulamadık mysqldadında.

Ayrıca services, tüm Brew yüklü servis uygulamalarını yönetmek için, bu yazıda açıklandığı gibi, demişe dayalı bir sistem de kurabilirsiniz - http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I Bunu kendim denemedim, yine de, YMMV.


2
Bu benim için düzeltti. Yerel olarak bir LAMP yığınını çalıştırmak için birden çok farklı yöntemle savaşırken her zaman acı verir.
Patrick

Bunu kaldırmak için Homebrew yolunu kullanmak zorunda kaldım, yani/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
23

10

TERMSinyali göndererek süreci öldürmeye çalıştım ve bu işe yaradı. Komut şuydu:

sudo kill -15 {PID}

8

Benim için bu, hangi etiketi aradığımı anladığımda işe yaradı.

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

6

Hizmeti kaldırın ve arka plan planını durdurun:

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

Hizmeti yükleyin ve arka plan planını başlatın:

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

Bu benim için çalıştı, ancak com.oracle.oss.mysql.mysqld.plist benim yerel MySQL, homebrew üzerinden değil, MySQL'den indirilerek kuruldu.
Jason

2

Hangi süreci öldürmeye çalışıyorsun? Mac OS X'teki bazı işlemler (örneğin, Dock, bazı sistem işlemleri) öldürüldüklerinde otomatik olarak yeniden oluşturulur.


mysqldSüreci öldürmeye çalışıyorum
Hristo

Muhtemelen tarafından yönetilir launchd, o zaman, süreç ölürse yeniden başlatır.
mipadi

1

/Library/LaunchDaemons/com.mysql.mysql.plist dosyasını düzenlemeyi, niteliği false olarak değiştirmeyi çözdüm

<!--?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

Makinenizde çalışan mysql engelleyen bir işlem var. Koşmak

ps auxwww | grep mysql

sonra yap

kill -15 {PID}

Onu engelleyen işlemim _mysql oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.