क्या "फोर्स क्विट" की तुलना में कुछ मजबूत है?


24

मेरे पास एक ऐप है जो मर नहीं जाएगा: यह गोदी से चला गया है, लेकिन खिड़की बनी हुई है (एक बीचबॉल के साथ, अगर मैं इस पर माउस करता हूं)। यह कोई सीपीयू का उपयोग कर रहा है, लेकिन मैं चाहता हूं कि यह दूर हो जाए।

क्या वास्तव में ऐप को मारने के लिए "फोर्स क्विट" की तुलना में कुछ मजबूत है ?


मुझे यकीन नहीं है कि अगर यह मजबूत है, लेकिन ऐप्स> उपयोगिताओं> गतिविधि मॉनिटर की कोशिश करें। प्रक्रिया का पता लगाएं, और फोर्स छोड़ो। यदि वह काम नहीं करता है, तो प्रक्रिया संख्या पर ध्यान दें, टर्मिनल पर जाएं और "किल #" टाइप करें जहां # प्रक्रिया संख्या है। HTH
डेविड डेलमोंटे

6
पावर बटन?
डेनियल

1
@DanielLawson दुर्भाग्य से, इन स्थितियों का परिणाम आमतौर पर होता है।
काजलुके

1
डेविड: मैं मानता हूं कि एप्पल "फोर्स क्विट" कहता है, चाहे आप इसे कैसे भी प्राप्त कर लें, लेकिन मैंने कोशिश की कि इसका भी कोई असर न हो।
केन

जवाबों:


14

यदि आपको ऐप का नाम पता है, तो आप गतिविधि मॉनिटर में देख सकते हैं कि क्या यह अभी भी चल रहा है और इसके फोर्स क्विट का प्रयास करें। यदि वह काम नहीं करता है, तो ऐप की प्रक्रिया आईडी (पीआईडी) पर ध्यान दें। टर्मिनल पर जाएं और kill [pid]पहले बताए गए नंबर के साथ "[pid]" को टाइप करें । अगर वह काम नहीं करता है, तो कोशिश करो kill -3 [pid]और अगर वह काम नहीं करता है kill -9 [pid]। प्रक्रिया (इस संभावना नहीं है) किसी दूसरे उपयोगकर्ता के स्वामित्व में है, तो आप बदलना पड़ सकता है killके साथ sudo killऔर संकेत मिलने पर अपना पासवर्ड टाइप करें।

यदि एप्लिकेशन गतिविधि मॉनिटर में दिखाई नहीं देता है या आप killइसे नहीं दिखा सकते हैं , तो खिड़की कहीं और कहीं अटकी हुई हो सकती है और ऐप को अभी और नहीं खोला गया है। इस मामले में, कभी-कभी (हमेशा नहीं) यह काम कर सकता है killall SystemUIServerया killall Dock

यदि इनमें से कोई भी काम नहीं करता है, तो आपको लॉग आउट करना होगा और वापस या रिबूट करना होगा। जितनी बार मैंने इस बिंदु को प्राप्त किया है, ऐप इतना अटक गया था कि इसे लॉग आउट करने या बंद करने से रोका गया था, इसलिए मुझे रिबूट को कठिन करना पड़ा।


मैंने इन सभी को आज़माया (सहित sudo, भले ही प्रक्रिया मेरे स्वामित्व में है), बिना किसी बदलाव के। विल killall SystemUIServerमेरे अन्य खुले ऐप्स के किसी भी प्रभावित करते हैं, खिड़की पदों भूल की तरह?
केन

2
gentmatt: के अनुसार kill -l, -3 SIGQUIT है, और -9 SIGKILL है ("नॉन-कैटैचेबल, नॉन-इग्नोरबल किल")।
केन

1
@gentmatt 3 QUIT सिग्नल है जो प्रक्रिया को सिग्नल को बाधित करने और क्लीनअप करने की क्षमता देता है। 9 KILL है "नॉन-कैटैसेबल और नॉन-इग्नोरबल"। अन्य संकेतों के ढेर हैं जिन्हें आप भेज सकते हैं; man killउन सभी को देखने के लिए (जो शीर्ष -10 सर्वश्रेष्ठ यूनिक्स कमांड में है) चलाएं ।
CajunLuke

1
मैं आम तौर पर सिर्फ -9 मारता हूं। -3 "फोर्स क्विट" से ज्यादा मजबूत नहीं है
segfault

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

7

बल ने खिड़की छोड़ दी killall, और killसभी डिफ़ॉल्ट रूप से TERM संकेतों को भेजते हैं। आप उपयोग कर सकते हैं killall -killअगर वह काम नहीं करता है।

हत्यारी उपयोगिता नाम से चयनित प्रक्रियाओं को मार डालती है, जैसा कि मार (1) द्वारा किया जाता है। डिफ़ॉल्ट रूप से, यह सभी प्रक्रियाओं के लिए एक वास्तविक UID के साथ एक TERM सिग्नल भेजेगा, जो कि नाम के नाम से मेल खाता है। सुपर-उपयोगकर्ता को किसी भी प्रक्रिया को मारने की अनुमति है।

यदि आप sudo dtrace -n 'proc:::signal-send /pid/ { printf("%s -%d %d",execname,args[2],args[1]->pr_pid); }'बल छोड़ खिड़की से कुछ एप्लिकेशन चलाते हैं और छोड़ते हैं, तो संकेत आमतौर पर -15 (TERM) के रूप में दिखाया जाता है। लेकिन जब आप एक्टिविटी मॉनिटर से बैकग्राउंड प्रोसेस (या डॉक में कोई एप्लिकेशन जो डॉक्यूमेंट में नहीं दिखाया गया है) को छोड़ देते हैं, तो सिग्नल आमतौर पर -9 (KILL) के रूप में दिखाया जाता है।

SIGTERM एक प्रक्रिया है जिसे किल या किल कमांड द्वारा भेजा जाता है। यह एक प्रक्रिया की समाप्ति का कारण बनता है, लेकिन SIGKILL सिग्नल के विपरीत, इसे पकड़ा जा सकता है और इस प्रक्रिया द्वारा व्याख्या (या अनदेखा) की जा सकती है। इसलिए, SIGTERM अच्छी तरह से समाप्त करने के लिए एक प्रक्रिया पूछने के लिए, सफाई और फ़ाइलों को बंद करने की अनुमति देने के लिए एक समान है। इस कारण से, शटडाउन के दौरान कई यूनिक्स प्रणालियों पर, यह उन सभी प्रक्रियाओं के लिए SIGTERM को जारी करता है जो बंद करने के लिए आवश्यक नहीं हैं, कुछ सेकंड प्रतीक्षा करता है, और फिर SIGKILL को ऐसी किसी भी प्रक्रिया को जबरन समाप्त करने के लिए जारी करता है।


यहाँ कुछ अच्छी जानकारी है, लेकिन इस प्रक्रिया को मारने के इन रूपों में से कोई भी इस पर कोई प्रभाव नहीं पड़ता है।
केन

यदि SIGKILLकाम भी नहीं करता है, तो ऐप शायद अबाधित नींद में है , और वास्तव में ऐसा कुछ भी नहीं है जो आप कर सकते हैं (रिबूटिंग की कमी)।
ब्लैकलाइट शाइनिंग

बस यह भी सोच रहा था, अगर यह एक उपयोगकर्ता ऐप था, जैसे mail.app या pages.app या क्या यह किसी तरह था, एक सिस्टम प्रक्रिया, स्पॉटलाइट की तरह, या एक एप्लिकेशन पृष्ठभूमि प्रक्रिया, जैसे Plex (जिसे मुझे हटाने में परेशानी होती है)।
डेविड डेलमोंट

6

मेरे पास ऐसी परिस्थितियां हैं जहां फोर्स क्विट, एक्टिविटी मॉनिटर killऔर अन्य तरीके काम नहीं करते थे, और मेरा मैक इसकी वजह से बंद नहीं हो सकता था।

इस मामले में, एक sudo shutdown -r nowकाम जब कुछ और नहीं होगा, और शायद पावर बटन के माध्यम से एक कठिन शटडाउन करने से बेहतर है।


1

जैसा कि उपरोक्त उत्तरों में, किसी भी प्रक्रिया को समाप्त करने का सबसे मजबूत तरीका है SIGKILL, जैसे kill -9 process_id

हालाँकि, ऐसी प्रक्रियाएँ मौजूद हैं जो Force Quitन तो असंभव हैं kill। उन्होंने zombieप्रक्रियाओं के रूप में बुलाया ।

यहाँ एक छोटी स्क्रिप्ट है जो zombieदो मिनट के लिए एक प्रक्रिया का निर्माण करेगी :

perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'

टर्मिनल में उपरोक्त स्क्रिप्ट चलाएँ और आपको आउटपुट मिलेगा, जैसे कि अगला:

     unkillable pid:50571
        UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
        501 47380 47379     4006   0  31  0  2448416   2900 -      S                   0 ttys000    0:00.36 -bash
        501 50570 47380     4006   0  31  0  2443512   1424 -      S+                  0 ttys000    0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570     2006   0   0  0        0      0 -      Z+                  0 ttys000    0:00.00 (perl)
        501 12795 12794     4006   0  31  0  2448296   1752 -      S+                  0 ttys001    0:00.75 -bash
        501 50123 50122     4006   0  31  0  2448296   2688 -      S+                  0 ttys002    0:00.14 -bash

यदि आप unkillable प्रक्रिया (इस मामले में: 50571) के लिए स्थिति स्तंभ की जाँच करते हैं, तो आप Zध्वज, व्हाट्स का मतलब देखते हैं zombie

आप कोई भी killसंकेत भेजने की कोशिश कर सकते हैं (जैसे kill -9 50571) और प्रक्रिया अभी भी मौजूद रहेगी। वैसे भी, यह आपके सिस्टम को बहुत नुकसान नहीं पहुंचाता है, क्योंकि यह वास्तव में मौजूद नहीं है - केवल प्रक्रिया तालिका पर कब्जा कर लेता है।

उपरोक्त उदाहरण में, 120 सेकंड में यह साफ हो जाएगा।


0

यही आपको करना चाहिए:

  1. गतिविधि मॉनिटर में, प्रक्रिया को डबल क्लिक करें या प्रक्रिया की विंडो खोलने के लिए जानकारी आइकन पर क्लिक करें।
  2. आप प्रक्रिया समूह लाइन में # प्रक्रिया को देखेंगे #NN # (####) जहां "####" आपकी प्रक्रिया / संख्या है।
  3. टर्मिनल खोलें और उद्धरण और हिट दर्ज के बिना "sudo किल ####" टाइप करें
  4. अपना पासवर्ड दर्ज करें, टर्मिनल आपके इनपुट को यहां नहीं दिखाएगा
  5. प्रक्रिया को मार दिया जाता है।

यदि आप अनइंस्टॉल का प्रयास करने जा रहे हैं तो इस तरह की प्रक्रिया सुरक्षित मोड में सबसे अच्छी तरह से हटा दी जाती है।

चीयर्स, ब्रायन

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