2009-05-24 18 views
43

मैंने kill -9 698 की कोशिश की लेकिन प्रक्रिया मर नहीं गई।मैकोज़ में एक प्रक्रिया को कैसे मारें?

$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 
$ kill -9 698 


$ ps -ef | grep chromium 
    502 698 811 0 0:01.24 ??   0:07.28 /Users/lucius/chromium/src/xcodebuild/Debug/Chromium.app/Contents/MacOS/Chromium 
    502 854 732 0 0:00.00 ttys001 0:00.00 grep chromium 

उत्तर

4

आप इस प्रक्रिया के नाम जानते हैं आप का उपयोग कर सकते हैं:

killall Dock 

आप नहीं करते आप गतिविधि मॉनिटर खोलने के लिए और इसे पा सकते हैं तो।

+0

मारने मुझे लगता है कि यह एक बुरा विचार वास्तव में उस आदेश को चलाने के लिए हो सकता है। मुझे लगता है कि आप आसानी से डॉक को फिर से शुरू कर सकते हैं, लेकिन मुझे नहीं पता कि उस दृष्टिकोण के साथ कोई समस्या होगी या नहीं। –

+0

यह सिर्फ एक प्रक्रिया का एक उदाहरण था, मैं नहीं चाहता कि वह अपने गोदी को मार डाले। मुझे लगता है कि हत्या के मुकाबले 'हत्यारा' एक अलग स्ट्रिंग लेता है। – Garrett

77

यदि आप इसे मारने की कोशिश कर रहे हैं -9, तो आपके पास सही पीआईडी ​​है, और कुछ भी नहीं होता है, तो आपको प्रक्रिया को मारने की अनुमति नहीं है।

समाधान:

$ sudo kill -9 PID 

ठीक है, यकीन है कि पर्याप्त मैक ओएस/एक्स इस मामले के लिए एक त्रुटि संदेश देता है: तो

$ kill -9 196 
-bash: kill: (196) - Operation not permitted 

, यदि आप नहीं मिल रहे हैं एक त्रुटि संदेश, आप किसी भी तरह सही पीआईडी ​​नहीं मिल रहे हैं।

+0

सही हो सकता है लेकिन मुझे याद है कि अगर हत्यारे द्वारा प्रक्रिया का स्वामित्व नहीं था तो मुझे एक त्रुटि संदेश देने को मारना याद है। – paxdiablo

+0

ईश्वर, यह उन व्यवहारों में से एक है जो यूनिक्स से यूनिक्स से अलग हैं। यह वांछनीय * नहीं * है कि त्रुटि है, क्योंकि यह एक गुप्त चैनल है; दूसरी तरफ यह एक उपयोगी त्रुटि संदेश है। –

+0

कौन सा यूनिक्स यहां कोई त्रुटि नहीं देता है? मैंने बीएसडी, लिनक्स और सोलारिस का परीक्षण किया है और सभी उपरोक्त त्रुटि (EPERM) का कुछ रूप देते हैं। –

2

यदि kill -9 काम नहीं कर रहा है, तो न तो killall (या यहां तक ​​कि killall -9 जो अधिक "तीव्र" होगा)। जाहिर है क्रोमियम प्रक्रिया एक गैर-इंटरप्टिबल सिस्टम कॉल (यानी, कर्नेल में, उपयोगकर्तालैंड में नहीं) में फंस गई है - ऐसा नहीं लगता था कि मैकॉक्स में से कोई भी बचा है, लेकिन मुझे लगता है कि हमेशा एक और है :-(अगर वह प्रक्रिया में एक नियंत्रण टर्मिनल होता है जिसे आप शायद पृष्ठभूमि में रख सकते हैं और पृष्ठभूमि के दौरान इसे मार सकते हैं; अन्यथा (या यदि प्रक्रिया को बाकग्राउंड किया जाता है तो भी तीव्र हत्या काम नहीं करती है) मैं विचारों से बाहर हूं और मुझे लगता है कि आपको रीबूट करना पड़ सकता है :-(।

2

अपने कार्यक्रम के लिए पथ, मुझे लगता है कि आप वर्तमान में Xcode के तहत इस चला रहे हैं, और एक डिबग ब्रेकप्वाइंट पर शायद रहे हैं। प्रक्रियाओं breakpoints की अंतर्निहित कार्यान्वयन की वजह से इस राज्य में मारा नहीं जा सकता को देखते हुए।

पहला कदम आपके एक्सकोड प्रक्रिया पर जाना होगा और डीबगिंग रोकना होगा। यदि एस के लिए ओमे अजीब कारण है कि आपने एक्सकोड तक पहुंच खो दी है (शायद एक्सकोड ने अपनी जीडीबी सब-प्रोसेस तक पहुंच खो दी है), तो समाधान जीडीबी प्रक्रिया को मारना है। अधिक आम तौर पर, यहां समाधान समाधान प्रक्रिया को मारना है। आपके मामले में यह पीआईडी ​​811 (तीसरा कॉलम) है।

इस मामले में -9 का उपयोग करने की आवश्यकता नहीं है।

1

मुझे अनुभव हुआ है कि अगर kill -9 PID काम नहीं करता है और आप प्रक्रिया के स्वामी हैं, तो आप kill -s kill PID का उपयोग कर सकते हैं जो कि मैन पेज कहता है कि आप kill -signal_number PID कर सकते हैं।

+0

'kill -s kill 9' ने मुझे – boraas

2

मैंने अभी इस तरह की खोज की है क्योंकि मैं इसी तरह की स्थिति में हूं, और kill -9 698 के बजाय मैंने sudo kill 428 की कोशिश की जहां 428 प्रक्रिया की पिड थी जिसे मैं मारने की कोशिश कर रहा हूं। हाइफ़न '-' चरित्र की अनुपस्थिति में, यह मेरे लिए साफ रूप से काम करता था। मुझे उम्मीद है यह मदद करेगा!

+0

मदद की है हाँ सुडो मार -9 पीआईडी ​​- यह मेरे लिए काम करता है (idk हम इसे उपयोगकर्ता से क्यों नहीं मार सकते हैं और ऊंचाई की आवश्यकता है) – Rob

3

कुछ मामलों में आप किसी विशिष्ट पोर्ट में चल रहे सभी प्रक्रियाओं को मारना चाहेंगे। उदाहरण के लिए, यदि मैं 3000 पोर्ट पर नोड ऐप चला रहा हूं और मैं इसे मारना चाहता हूं और एक नया शुरू करना चाहता हूं; तो मुझे यह आदेश उपयोगी पाया।

प्रक्रिया आईडी TCP पोर्ट 3000 पर चल रहा है का पता लगाएं और यह

kill -9 `lsof -i TCP:3000 | awk '/LISTEN/{print $2}'` 
संबंधित मुद्दे