Ubuntu सर्वर में एक अटक गई कमांड को कैसे खत्म करें?


11

मुझे पता है कि वहाँ ctrl+ है c, लेकिन कभी-कभी यह काम नहीं करता है। उबंटू डेस्कटॉप में मैं टर्मिनल विंडो को बंद कर सकता हूं और ऐसा होने पर एक नया खोल सकता है, लेकिन यह Ubuntu सर्वर में सीएलआई (बॉक्स को पुनरारंभ किए बिना) का उपयोग करके कैसे हल किया जाएगा?


जवाबों:


21

CTRL+CSIGINTआवेदन के लिए भेज देंगे । एप्लिकेशन इस सिग्नल के लिए हैंडलर कॉन्फ़िगर कर सकता है या यह सिग्नल को अनदेखा कर सकता है। डिफ़ॉल्ट रूप से कोई हैंडलर नहीं है और SIGINTएप्लिकेशन को मार देगा।

आप उपयोग कर सकते हैं CTRL+\जो भेजेगा SIGQUIT। यदि कोर सीमा शून्य नहीं है, तो यह एक कोर डंप भी उत्पन्न करेगा।

आप प्रक्रिया को निलंबित कर सकते हैं और शेल के साथ वापस आ सकते हैं, इससे प्रक्रिया का निष्पादन बंदCTRL+Z हो जाएगा और शेल प्रॉम्प्ट पर वापस आ जाएगा। प्रक्रिया स्मृति में होगी और यह वर्तमान शेल में नौकरी के रूप में उपलब्ध होगी। फिर आप उस जॉब के लिए सिग्नल भेज या उपयोग कर सकते हैं । जैसे आखिरी काम का उपयोग करनाkill -SIGNAL %%kill -SIGNAL %<job_ID>kill -9 %%

यदि उनमें से कोई भी काम नहीं कर रहा है SIGTERM, तो आप हमेशा अंतिम उपाय के रूप में भेज सकते हैं , SIGKILLजो किसी भी प्रक्रिया को समाप्त कर देगा। यह संकेत किसी भी अन्य संकेत के रूप में उसी उपयोगकर्ता के रूप में भेजा जाना चाहिए जिस प्रक्रिया को आप रोकने या रूट के रूप में प्रयास कर रहे हैं। भेजने के लिए SIGKILLप्रक्रिया के लिए, पहले के साथ प्रक्रिया को खोजने ps auxया ps -edf, फिर से चलाने kill -SIGKILL <process_ID>, जहां <process_ID>है PIDमें स्तंभ psउत्पादन।

यदि प्रक्रिया एक निर्बाध कॉल में है, तो संकेतों को वितरित नहीं किया जा सकता है। अबाधित कॉल कर्नेल फ़ंक्शंस हैं जिन्हें रोका नहीं जा सकता है और आमतौर पर खराब ड्राइवर के कारण होता है (उदाहरण के लिए एक ड्राइवर जो पुनर्मिलन नहीं होता है )। एक प्रक्रिया जो निर्बाध नींद में होती है उसे तब तक नहीं रोका जा सकता जब तक कि कॉल पूरी नहीं हो जाती या सर्वर रिबूट नहीं हो जाता।

यदि कोई प्रक्रिया ज़ोंबी बन जाती है , तो यह किसी भी संसाधन का उपयोग केवल प्रक्रिया तालिका में स्थान नहीं लेगा। एक ज़ोंबी प्रक्रिया सिग्नल प्राप्त नहीं कर सकती है।

वर्तमान वास्तुकला के संकेतों की सूची के साथ पाया जा सकता है kill -l

के मैन पेज देखें kill, psऔर bash। एक आदमी पृष्ठ देखने के लिए कुछ का उपयोग करें:man ps


2

यदि आपके पास पूर्ण कंसोल पहुंच है, तो आप कर सकते हैं Alt- F1..12और एक नया कंसोल प्राप्त करें।

वहां से, आप इस तरह की एक प्रक्रिया लिस्टिंग कर सकते हैं:

ps aux | grep <process-name>

फिर killप्रक्रिया आईडी पर करें:

kill -9 <pid>

यदि आपके पास पूर्ण कंसोल एक्सेस नहीं है, तो बस एक और टर्मिनल विंडो खोलें (शायद PuTTY या समान के माध्यम से), और उपरोक्त प्रक्रिया को सूचीबद्ध करें और चरणों को मारें।


1

Ctrl C आपके चलने की प्रक्रिया के लिए एक संकेत भेजता है। यदि आप दूसरा कंसोल नहीं खोलना चाहते हैं तो आप Ctrl \ N के साथ एक SIGQUIT भेज सकते हैं। यह दिन-प्रतिदिन उन त्रिशंकु एप्लिकेशन को संबोधित करेगा जो SIGINT नहीं करता है।

मैं व्यक्तिगत रूप से शॉर्टकट के साथ SIGKILL भेजने का एक तरीका चाहता हूं लेकिन मुझे ऐसा करने के तरीके के बारे में पता नहीं है।


1

मैं विचार करता हूं pgrepऔर स्पष्ट प्रक्रिया आईडी के साथ pkillउपयोग करना आसान है kill

इसके अलावा, संकेत 9 (SIGKILL) से शुरू करने के बजाय, डिफ़ॉल्ट SIGTERM (15) से शुरू करने पर विचार करें। यह प्रक्रिया को इनायत (यदि ऐसा हो सकता है) को समाप्त करने का मौका देगा। pkill -15 thingऔर pkill thingसमकक्ष होना चाहिए।

यहाँ है कि कैसे काम करेगा। मान लीजिए कि ntpd लटका हुआ है।

क्या प्रक्रियाएं हैं? (यदि आप मानते हैं कि आपके पास झूठी सकारात्मकता नहीं होगी तो आप pkill को छोड़ सकते हैं)।

$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd

प्रक्रियाओं को मार डालो:

$ pkill ntpd

pgrepयह देखने के लिए फिर से उपयोग करें कि क्या यह सफल रहा।

यदि नहीं, तो अंत में आगे बढ़ें pkill -9


0

आप एक नए टर्मिनल पर जाएंगे, अटक प्रक्रिया के पीआईडी ​​को खोजें (उपयोग करें ps), फिर killप्रक्रिया को मारने के लिए उपयोग करें। मैं सबसे पहले उपयोग करूंगा kill (PID)। अगर वह काम नहीं करता है, तो मैं उपयोग करूंगा kill -9 (PID)। यदि वह प्रक्रिया बंद नहीं करता है तो मशीन को रिबूट करने की आवश्यकता है।


0

Cntrl+ \मेरे लिए काम किया (जहां Cntrl+ cया zकाम नहीं किया)

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