सवाल क्या करें जब Ctrl + C किसी प्रक्रिया को मार नहीं सकता है?


Ctrl + सी वर्तमान प्रक्रिया को मारने के लिए हमेशा काम नहीं करता है (उदाहरण के लिए, यदि वह प्रक्रिया कुछ नेटवर्क संचालन में व्यस्त है)। उस स्थिति में, आप बस अपने कर्सर द्वारा "^ सी" देखते हैं और बहुत कुछ नहीं कर सकते हैं।

मेरे टर्मिनल को खोए बिना अब प्रक्रिया को मरने का सबसे आसान तरीका क्या है?

उत्तरों का सारांश: आमतौर पर, आप कर सकते हैं Ctrl + जेड प्रक्रिया को सोने के लिए, और फिर करते हैं kill -9 _process-pid_, जहां आपको प्रक्रिया की पिड मिलती है ps और अन्य उपकरण। पर दे घुमा के (और संभवतः अन्य गोले), आप कर सकते हैं kill -9 %1 (या सामान्य रूप से '% एन') जो आसान है। अगर Ctrl + जेड काम नहीं करता है, आपको एक और टर्मिनल खोलना होगा और हत्या वहां से।


145
2018-02-09 08:49


मूल


screen एक संभावित समाधान होगा, आपको एक नई विंडो बनाने की अनुमति होगी kill वहां से प्रक्रिया। - Bobby
मान लीजिए कि आप पहले से ही एक स्क्रीन में थे :) - Dustin Boswell


जवाब:


क्यों समस्या की समझ को समझने के लिए Ctrl + सी काम नहीं करता है, यह समझने में बहुत मददगार होता है कि जब आप इसे दबाते हैं तो क्या होता है:

अधिकांश गोले बांधते हैं Ctrl + सी "भेजने के लिए SIGINT कार्यक्रम के लिए संकेत जो वर्तमान में अग्रभूमि में चलता है "। आप विभिन्न सिग्नल के माध्यम से पढ़ सकते हैं आदमी संकेत:

 SIGINT        2       Term    Interrupt from keyboard

कार्यक्रम उस सिग्नल को अनदेखा कर सकते हैं, क्योंकि वे अनदेखा कर सकते हैं SIGTSTP भी:

 SIGTSTP   18,20,24    Stop    Stop typed at tty

(जब आप दबाते हैं तो अधिकांश गोले क्या करते हैं Ctrl + जेड, यही कारण है कि यह काम करने की गारंटी नहीं है।)

कुछ सिग्नल हैं जिन्हें प्रक्रिया द्वारा अनदेखा नहीं किया जा सकता है: SIGKILL, SIGSTOP और कुछ अन्य। आप इन संकेतों के माध्यम से भेज सकते हैं हत्या आदेश। तो, अपनी फांसी / ज़ोंबीइंग प्रक्रिया को मारने के लिए, बस ढूंढें प्रक्रिया आईडी (पीआईडी)। उदाहरण के लिए, उपयोग करें pgrep या ps और फिर kill यह:

 % kill -9 PID

102
2018-02-09 09:13



एक मात्र टिप्पणी। सावधान रहें कि "ज़ोंबी" तकनीकी रूप से एक प्रक्रिया स्थिति है, और यह आपके जैसा "zombieying" द्वारा यहां जैसा मतलब था वैसा नहीं है। (एक समाप्त प्रक्रिया जो प्रतीक्षा नहीं की गई है () - इसके माता-पिता द्वारा एड ज़ोंबी में है (Z) राज्य। इस मामले में, यह अब संकेतों को संभाल नहीं सकता है।) - Stéphane Gimenez
हां, कभी-कभी ctrl + c, ctrl + z, और ctrl + \ सब कुछ नहीं करते हैं, और प्रक्रिया पूर्ववत सूडो (पासवर्ड के बिना अनुमति दी जाती है) चल रही है ताकि आप प्रक्रिया को केवल सिग्नल न भेज सकें। - Michael


अगर Ctrl+सी (SIGINT) काम नहीं करता है, कोशिश करो Ctrl+\ (SIGQUIT)। फिर कोशिश करो Ctrl+जेड (SIGTSTP)। यदि वह आपको शेल प्रॉम्प्ट पर लौटाता है, तो करें kill प्रक्रिया आईडी पर। (यह SIGTERM सिग्नल पर डिफ़ॉल्ट है, जिसे आप निर्दिष्ट कर सकते हैं kill -TERM। कुछ गोले में, आप उपयोग करने में सक्षम हो सकते हैं %1 पीआईडी ​​को संदर्भित करने के लिए।) यदि यह काम नहीं करता है, तो दूसरे टर्मिनल या एसएसएच सत्र पर जाएं और करें kill या kill -TERM प्रक्रिया आईडी पर। केवल अंतिम उपाय के रूप में क्या आपको करना चाहिए kill -KILL, ए.के.ए. kill -9, क्योंकि यह प्रक्रिया को स्पष्ट रूप से निरस्त करने का कोई मौका नहीं देता है, इसकी खुली फाइलों को सिंक करता है, इसकी अस्थायी फाइलें बंद करता है, नेटवर्क कनेक्शन बंद करता है, इत्यादि।


97
2018-02-09 09:36





Ctrl-Z दबाएं कार्यक्रम को निलंबित करें और इसे पृष्ठभूमि में रखें:

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(फिर से अग्रभूमि के लिए बहाल करें fg)

तब आप कर सकते हो kill या kill -9 यह, अपनी प्रक्रिया आईडी दिया (आप इसे से प्राप्त करते हैं ps a)।


27
2018-02-09 08:53



बाश के साथ आप कर सकते हैं kill $!, जैसा $! आखिरी पृष्ठभूमि कार्यक्रम की पिड युक्त एक विशेष चर है। - Lloeki
@Lloeki मेरे लिए काम नहीं करता है (कम से कम विश्वसनीय नहीं)। मुझे करना होगा bg एक बार वैरिएबल को एक मान असाइन किया जाता है। - Daniel Beck♦
@ डैनियल, सही। जैसा कि मैंने आखिरी कहा था backgrounded प्रक्रिया, इस प्रकार जरूरत है bg Ctrl + Z के ठीक बाद इसे केवल निलंबित कर दिया गया है। - Lloeki
नोट: यह सिर्फ एक चाल है, का उपयोग कर ps आउटपुट (या killall) यदि आपके पास एक ही नाम चलने के साथ कई प्रक्रियाएं हैं तो काफी जोखिम भरा है। ps -e -o pid,command पिड + पूर्ण तर्क प्रदान करेगा, न सिर्फ प्रोग्राम का नाम, बल्कि फिर से भेदभाव करने के लिए पर्याप्त नहीं होगा। इसके विपरीत $! एक निश्चित हिट है। - Lloeki
@ लोकेकी मैं असहमत हूं। उदाहरण आउटपुट लाइन से ps a मेरे सिस्टम पर: 27721 s000 T 0:00.09 top कितने निलंबित (T, मुझे लगता है) एक ही आदेश के उदाहरण (top) क्या आप एक ही tty में चल रहे हैं (s000)? - Daniel Beck♦


यह देखो संपर्क भी।

Ctrl+जेड: एक प्रक्रिया रोकें।

Ctrl+सी: विनम्रतापूर्वक प्रक्रिया को बंद करने के लिए कहें।

Ctrl+\: वर्तमान में अग्रभूमि में मौजूद प्रक्रिया को निर्दयतापूर्वक मार दें


23
2018-06-19 03:03





आमतौर पर, आप अभी भी प्रक्रिया को रोक सकते हैं (Ctrl + जेड) और फिर उपयोग करें kill -9। के लिये kill -9, आपको चाहिए प्रक्रिया पीआईडी प्रथम। पृष्ठभूमि नौकरियों के लिए, kill -9 %1 ऐसा करने का सबसे आसान तरीका है - यदि आप अनिश्चित हैं कि पृष्ठभूमि नौकरी की संख्या क्या है जिसे आप मारना चाहते हैं, तो चलाएं jobs

वैकल्पिक रूप से, आप के साथ प्रक्रिया आईडी पा सकते हैं

ps

फिर आप दौड़ सकते हैं

kill -9 <Appropriate PID from ps output>

12
2018-02-09 08:53





1) यदि आप कंसोल पर हैं और बहु-उपयोगकर्ता मोड में हैं, तो आप CTRL-ALT-Fn दबा सकते हैं और दूसरी स्क्रीन पर लॉगिन कर सकते हैं ps -ef | grep <myprocessname> या pidof <myprocessname> और उसके बाद आईडी संख्या द्वारा प्रक्रिया को मार दें।

2) यदि आप दूरस्थ रूप से जुड़े हुए हैं, तो दूसरे टर्मिनल सत्र के माध्यम से ऐसा ही करें।

आप स्थापित करके जीवन को थोड़ा आसान बना सकते हैं htop, जो शीर्ष का एक अधिक बहुमुखी संस्करण है जो आपको चुनिंदा प्रक्रियाओं को चुनिंदा रूप से मारने की अनुमति देता है। अधिकांश distros एक रेपो में htop है।

3) अगर आप सिर्फ एक लटका एसएसएच सत्र में फंस गए हैं (उदाहरण के लिए, किसी अन्य सिस्टम में), tilde (~) दबाकर देखें, जो कि एस्केप कुंजी है, और उसके बाद होस्ट सत्र पर वापस जाने के लिए CTRL-Z दबाएं, फिर आप अटक गई एसएसएच प्रक्रिया को मार सकते हैं या इसके लिए समय-समय पर प्रतीक्षा कर सकते हैं, जो अधिकतर निष्क्रियता निष्क्रियता के बाद करते हैं।


4
2018-02-09 09:01





बैश (और अन्य गोले?) के लिए एक आसान समाधान करना है:

Ctrl-z      followed by     kill -9 %1

जहां '% 1' का मतलब नौकरी संख्या को मार दिया जाता है। यदि आपके पास पहले से ही अन्य नौकरियां सो रही हैं तो यह '% 2' (या कुछ और) हो सकती है। जब आप Ctrl-z दबाते हैं तो आप देख सकते हैं कि यह कौन सा जॉब नंबर है:

[1]+  Stopped                 <process name>

ध्यान दें कि 'मार' हत्या का खोल संस्करण है, नहीं / बिन / मारना।


3
2018-04-18 10:41





यदि आप टीएमयूक्स या स्क्रीन का उपयोग कर रहे हैं, और उपर्युक्त कार्यों में से कोई भी नहीं है, तो आप अभी भी फलक को मार सकते हैं <prefix> x, तो प्रक्रिया भी मारे गए।


0
2017-10-26 13:16





शायद आपके / etc / प्रोफ़ाइल में SIGINT (2) के साथ एक जाल सेट हो सकता है। यदि ऐसा है, तो इसे हटा दें। लॉगआउट करें और वापस लॉग इन करें और आपको अच्छा होना चाहिए।


0