कैसे मैक ओएस एक्स में प्रक्रिया को मारने के लिए और यह अपने आप को पुनः आरंभ नहीं है


29

जब मैं sudo kill -9 [PID]उचित प्रक्रिया आईडी के साथ चलता हूं , तो प्रक्रिया बंद हो जाती है, लेकिन फिर से शुरू होती है और एक नया पीआईडी ​​होता है। मैं इस mysqldप्रक्रिया को मारने की कोशिश कर रहा हूं ।

मैं एक प्रक्रिया को मारने में गतिविधि मॉनिटर की नकल कैसे कर सकता हूं? गतिविधि मॉनिटर में, जब आप "क्विट प्रोसेस" दबाते हैं, तो प्रक्रिया स्थायी रूप से चलना बंद हो जाती है, यह पूरी तरह से समाप्त हो जाता है। मैं समझती हूं कि killवही काम करेगा?

मेरे पास एक दूसरे के बगल में गतिविधि मॉनिटर और टर्मिनल दोनों हैं, यह देखने के लिए कि क्या कमांड काम करता है, लेकिन हर बार जब मैं करता हूं sudo kill -9 [PID], तो गतिविधि मॉनिटर में प्रक्रिया दूर नहीं जाती है, यह बस एक नए पीआईडी ​​के साथ ताज़ा करता है।

तो ... मैं mysqldटर्मिनल के माध्यम से प्रक्रिया को कैसे मार सकता हूं ?


मैंने इसे एक्टिविटी मॉनीटर से किया था क्योंकि 'किल' कमांड पीआईडी ​​को मान्यता नहीं दे रहा था। आपके मामले के विपरीत, मेरे mysqld ने एक्टिविटी मॉनीटर से इसे मारते ही दोबारा शुरू नहीं किया।
योसाफ अब्दुल्ला

आउच! जब तक आप वास्तव में की जरूरत है -9 का उपयोग न करें। किसी प्रक्रिया को करना हिंसक बात है। अन्य संकेत एक प्रक्रिया को क्रमबद्ध तरीके से समाप्त करने की अनुमति देते हैं, लेकिन -9 नहीं! तो इसका मतलब है कि रैम बफ़र्स डिस्क के लिए फ्लश नहीं करते हैं, उदाहरण के लिए। यह एक डेटाबेस के लिए एक विशेष रूप से खराब चीज है जो काम करने की प्रक्रिया में है; आप क्षतिग्रस्त तालिकाओं पर वापस आएंगे।
Jan Steinman

जवाबों:


22

जिस प्रक्रिया को आप मार रहे हैं, वह शायद लॉन्च द्वारा प्रबंधित किया जा रहा है , इसे रोकने का उचित तरीका और इसे पुनः आरंभ नहीं करना है launchctl unload <path to 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 में।
नमस्ते 71१

7
मुझे भी यही समस्या थी और mysql को लॉन्च के माध्यम से दूर करने में सक्षम था sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

टिप्पणियों के एक जोड़े का उल्लेख है कि "लॉन्चड शायद शामिल है" - तो मैंने सोचा कि मैं इसे एक अतिरिक्त उत्तर के रूप में बाहर कर दूंगा। जैसा कि @ jarrod-roberson कहता है, आप देख सकते हैं कि लॉन्चिंग पहले चलने से जुड़ा हुआ है या नहीं launchctl list | grep mysqld

एक महत्वपूर्ण बात जो आप यहां सीखते हैं, वह यह है कि MySQL को Homebrew के साथ इंस्टॉल किया गया था या नहीं - ब्रू ने अपनी launchctlफ़ाइलों को एक अलग स्थान पर संग्रहीत किया है जहां 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-homebreit I हालांकि, यह खुद की कोशिश नहीं की है, तो YMMV।


2
यही मेरे लिए तय है। हमेशा एक दर्द जब आप स्थानीय रूप से LAMP स्टैक को चलाने के लिए कई अलग-अलग तरीकों से लड़ रहे होते हैं।
पैट्रिक

मुझे इसे हटाने के लिए /usr/local/opt/mysql/homebrew.mxcl.mysql.plist
होमब्रेव

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

आप किस प्रक्रिया को मारने की कोशिश कर रहे हैं? मैक ओएस एक्स में कुछ प्रक्रियाएं (जैसे, डॉक, कुछ सिस्टम प्रक्रियाएं) स्वचालित रूप से प्रतिक्रिया करती हैं यदि वे मारे गए हों।


मैं को मारने के लिए कोशिश कर रहा हूँ mysqldप्रक्रिया
ह्रिस्टो

शायद द्वारा प्रबंधित किया जाता है launchd, फिर, जो प्रक्रिया शुरू होने पर इसे फिर से शुरू करेगा।
मिपादी

1

मैंने /Library/LaunchDaemons/com.mysql.mysql.plist फ़ाइल के संपादन को हल किया, विशेषता को असत्य में बदल दिया

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.