रुकी हुई नौकरियां हैं (बाहर निकलने पर)


157

मुझे संदेश मिलता है There are stopped jobs.जब मैं कभी-कभी बैश शेल से बाहर निकलने की कोशिश करता हूं। यहाँ अजगर 2.x में एक प्रतिलिपि प्रस्तुत करने योग्य परिदृश्य है:

  • ctrl+ cएक अपवाद के रूप में दुभाषिया द्वारा नियंत्रित किया जाता है।
  • ctrl+ z'प्रक्रिया' को रोक देता है।
  • ctrl+ dReals के लिए बाहर निकलता है अजगर।

यहाँ कुछ वास्तविक दुनिया टर्मिनल उत्पादन है:

example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

ctrl+z

[1]+  Stopped                 python
example_user@example_server:~$ exit
logout
There are stopped jobs.

बैश बाहर नहीं निकला, मुझे exitबैश शेल से बाहर निकलना होगा ।

  • प्रश्न: 'रुकी हुई नौकरी' क्या है या इसका क्या मतलब है?
  • प्रश्न: क्या एक रुकी हुई प्रक्रिया फिर से शुरू की जा सकती है?
  • प्रश्न: क्या पहला exitकाम बंद कर दिया गया है?
  • प्रश्न: क्या पहली बार शेल से बाहर निकलने का कोई तरीका है? ( exitदो बार प्रवेश किए बिना )

ctrl + shift + \ _ से भी अजगर बाहर निकल जाएगा।
थोरसुमोनर

जवाबों:


205

एक रुका हुआ काम वह है जो अस्थायी रूप से पृष्ठभूमि में रखा गया है और अब नहीं चल रहा है, लेकिन अभी भी संसाधनों (यानी सिस्टम मेमोरी) का उपयोग कर रहा है। क्योंकि वह नौकरी वर्तमान टर्मिनल से जुड़ी नहीं है, इसलिए वह आउटपुट नहीं दे सकती है और उपयोगकर्ता से इनपुट प्राप्त नहीं कर रही है।

आप jobsबैश में बिलियन कमांड का उपयोग करके अपने द्वारा चलाए जा रहे कार्य देख सकते हैं , शायद अन्य गोले भी। उदाहरण:

user@mysystem:~$ jobs
[1] + Stopped                python
user@mysystem:~$ 

fgबिल्ट-इन कमांड (फोरग्राउंड) बैश का उपयोग करके आप रुकी हुई नौकरी को फिर से शुरू कर सकते हैं । यदि आपके पास कई कमांड हैं, जिन्हें रोक दिया गया है, तो आपको निर्दिष्ट करना होगा कि कमांड लाइन पर जॉबस्पेक नंबर पास करके फिर से शुरू करें fg। यदि केवल एक कार्यक्रम बंद कर दिया जाता है, तो आप fgअकेले उपयोग कर सकते हैं:

user@mysystem:~$ fg 1
python

इस बिंदु पर आप अजगर इंटरप्रेटर में वापस आ गए हैं और नियंत्रण-डी का उपयोग करके बाहर निकल सकते हैं।

इसके विपरीत, आप killकमांड के साथ जॉबस्पेक या पीआईडी ​​हो सकते हैं। उदाहरण के लिए:

user@mysystem:~$ ps
  PID TTY          TIME CMD
16174 pts/3    00:00:00 bash
17781 pts/3    00:00:00 python
18276 pts/3    00:00:00 ps
user@mysystem:~$ kill 17781
[1]+  Killed                  python
user@mysystem:~$ 

जॉबस्पेक का उपयोग करने के लिए, प्रतिशत (%) कुंजी के साथ संख्या से पहले:

user@mysystem:~$ kill %1
[1]+  Terminated              python

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

बैश में ऐसा लगता है कि आप logoutकमांड का उपयोग कर सकते हैं जो बंद प्रक्रियाओं और निकास को मार देगा। इससे अवांछित परिणाम हो सकते हैं।

यह भी ध्यान दें कि कुछ प्रोग्राम इस तरह से समाप्त होने पर बाहर नहीं निकल सकते हैं, और यदि आप ऐसा करने की आदत बनाते हैं तो आपका सिस्टम संसाधनों का उपयोग करके बहुत सारी अनाथ प्रक्रियाओं के साथ समाप्त हो सकता है।

ध्यान दें कि आप पृष्ठभूमि प्रक्रिया बना सकते हैं जो उपयोगकर्ता इनपुट की आवश्यकता होने पर बंद हो जाएगी:

user@mysystem:~$ python &
[1] 19028
user@mysystem:~$ jobs
[1]+  Stopped                 python

आप इन नौकरियों को उसी तरह से फिर से शुरू कर सकते हैं और मार सकते हैं, जिस तरह से आपने काम किया था जिसे आपने Ctrl-zरुकावट के साथ रोका था ।


4
मैं आपके दूसरे वाक्य से विचलित होऊंगा। यह कहना चाहिए, "क्योंकि नौकरी रोक दी गई है , इसलिए यह कोई कार्रवाई नहीं कर सकता है - फाइल I / O, नेटवर्क I / O, टर्मिनल I / O, या कोई अन्य प्रसंस्करण।"
स्कॉट

2
इससे मुझे बहुत मदद मिलती है।
शेल्बी

किसी भी एक के लिए उत्कृष्ट पोस्ट महान मदद!
जॉर्ज उदेन

18

प्रश्न: 'रुकी हुई नौकरी' क्या है या इसका क्या मतलब है?

रुकी हुई नौकरी का अर्थ है वह प्रक्रिया जो कीबोर्ड (सस्पेंड कैरेक्टर ), कमांड (जैसे ) या दूसरी प्रक्रिया (जैसे कि कर्नेल जब सिस्टम में संसाधनों की कमी है ) से स्टॉप सिग्नल ( SIGSTOP/ SIGTSTP) प्राप्त हुआ और यह पॉज़्ड अवस्था में है, इसलिए यह सिस्टम को रोकने / निलंबित करने के लिए कहता है एक प्रक्रिया तो यह किसी भी निष्पादन / प्रसंस्करण नहीं करेगा।Ctrl-Zkill -STOP [PID]

सक्रिय शेल नौकरियों द्वारा सूचीबद्ध किया जा सकता है jobs:।

प्रश्न: क्या एक रुकी हुई प्रक्रिया फिर से शुरू की जा सकती है?

रोकी गई प्रक्रिया केवल इसके निष्पादन को फिर से शुरू करेगी यदि इसे SIGCONTसंकेत भेजा जाता है। यह या तो fg(या fg ID) द्वारा प्राप्त किया जा सकता है जो नौकरी को अग्रभूमि में ले जाएगा इसे वर्तमान नौकरी बना देगा, bgइसे पृष्ठभूमि में जारी रखने के लिए, या SIGCONTसंकेत भेजकर (जैसे kill -CONT [PID])।

प्रश्न: क्या पहला निकास नौकरियों को रोक देता है?

पहली बार जब आप लिखते हैं exit/ logoutया प्रेस Ctrl-D, खोल प्रिंट वर्तमान सक्रिय कार्य है कि अपने टर्मिनल के साथ जुड़े रहे हैं के बारे में एक चेतावनी संदेश, इसलिए यह आपकी अनुमति के बिना उन कार्रवाई दूसरी बार की पुष्टि करके नहीं मारूंगा। यदि checkjobsविकल्प सक्षम है ( shopt -s checkjobs), तो यह उनकी स्थिति के साथ नौकरियों को भी सूचीबद्ध कर सकता है।

प्रश्न: क्या पहली बार शेल से बाहर निकलने का कोई तरीका है? (दो बार बाहर निकलने के बिना)

आप Ctrl+Dदो बार दबा सकते हैं या इसे लंबे समय तक दबाए रख सकते हैं , यह खोल से बाहर निकल जाएगा, जिससे वर्तमान में बंद / चल रही शेल नौकरियों को मार दिया जाएगा।

वैकल्पिक रूप से उन त्याग देते ( disown) उन्हें छोड़ने या उन्हें मैन्युअल को मारने के लिए: kill $(jobs -p)

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