यह लेख आपको दिखाएगा कि लिनक्स (उबंटू सहित) शेल पृष्ठभूमि में कमांड कैसे चलाएं। SSH के माध्यम से दूरस्थ रूप से कार्य करते समय यह उपयोगी होता है।
कहते हैं कि आप SSH के माध्यम से दूरस्थ कंप्यूटर से दूरस्थ रूप से जुड़े हुए हैं, और आप एक लंबा कार्य निष्पादित करना चाहते हैं।
जबकि कार्य चल रहा है, आमतौर पर, आपको टर्मिनल विंडो खुली होने के साथ कनेक्शन खुला रखना होगा। हालांकि, यह एक परेशानी हो सकती है यदि आपको किसी अन्य कार्य को करने के लिए विंडो बंद करने की आवश्यकता है या यदि आपके पास एक धब्बेदार इंटरनेट कनेक्शन है जो संभवतः कनेक्शन को बाधित करेगा।
यदि विंडो बंद है या कनेक्शन खो गया है, तो दूरस्थ कंप्यूटर पर कमांड का निष्पादन बंद हो सकता है।
कमांड को बैकग्राउंड में चलाकर, इससे बचा जा सकता है - यह चलता रहेगा चाहे कनेक्शन/सत्र खुला रहे या नहीं।
यदि आप किसी कमांड को निष्पादित करना चाहते हैं, लेकिन इसके पूरा होने की प्रतीक्षा नहीं करना चाहते हैं और बाद में आपकी स्क्रिप्ट में आउटपुट की आवश्यकता नहीं है, तो पृष्ठभूमि में चलने के लिए कमांड भेजना स्क्रिप्ट में भी उपयोगी हो सकता है।
& का उपयोग करना बैकग्राउंड में कमांड चलाने के लिए
Linux में बैकग्राउंड में कमांड चलाना आसान है - एक & . जोड़ें आपके आदेश के अंत तक वर्ण:
your_command_here &
उदाहरण के लिए, निम्न कमांड फाइलों की एक जोड़ी को ज़िप करता है - कमांड पृष्ठभूमि में चलाया जाता है, इसलिए आपको अन्य कमांड चलाने से पहले इसके पूरा होने की प्रतीक्षा नहीं करनी पड़ती है:
zip archive.zip file1 file2 &
आसान! आउटपुट कुछ इस तरह दिखेगा:
[1] 3001
…कार्य का संकेत देना (इस मामले में [1] ) और प्रक्रिया आईडी (इस मामले में 3001 ) पृष्ठभूमि में निष्पादित की जा रही कमांड का।
जब कार्य पूरा हो गया हो (या विफल ), कार्य की स्थिति आउटपुट होगी:
[1] + done zip archive.zip file1 file2
बैकग्राउंड जॉब के आउटपुट को छिपाना
बैकग्राउंड में चलने के दौरान कमांड का आउटपुट टर्मिनल पर प्रिंट होता रहेगा।
यदि आप इसे छिपा कर रखना चाहते हैं (यानी, यह आपको अन्य कार्यों को करने में बाधा डाल रहा है) - आप मानक पुनर्निर्देशन का उपयोग करके आउटपुट को दबा सकते हैं।
your_command > /dev/null 2>&1 &
- ऊपर, > कमांड के STDOUT (मानक आउटपुट) को /dev/null . पर रीडायरेक्ट कर रहा है ।
- कमांड का STDERROR (मानक त्रुटि आउटपुट) 2>&! का उपयोग करके STDOUT पर रीडायरेक्ट किया जाता है ताकि STDERR /dev/null . पर जाए साथ ही।
- /dev/null इसका मतलब है कि आउटपुट कहीं नहीं जाता है। यह चला गया है, छिपा हुआ है, कुछ भी नहीं है।
चल रहे बैकग्राउंड जॉब्स को सूचीबद्ध करना
नौकरियों का उपयोग करें वर्तमान में चल रहे पृष्ठभूमि कार्यों को सूचीबद्ध करने का आदेश:
jobs -l
यह चल रहे पृष्ठभूमि कार्यों की एक सूची दिखाएगा - प्रत्येक प्रविष्टि कुछ इस तरह दिखाई देगी:
[1] + 3601 running ping 8.8.8.8 > /dev/null 2>&1
ऊपर, आप पिंग 8.8.8.8> /dev/null 2>&1 कमांड देख सकते हैं 1 की जॉब आईडी और 3601 की प्रोसेस आईडी के साथ बैकग्राउंड में चल रहा है।
बैकग्राउंड जॉब रोकना
हत्या आदेश एक कार्य को रोकता है:
kill 3601
... इसे प्रक्रिया आईडी . के साथ आपूर्ति करें पृष्ठभूमि नौकरी की, और यह इसे रोक (मार) देगा।
बैकग्राउंड जॉब को चालू रखना, भले ही सत्र बाधित हो
यह शायद सबसे उपयोगी बिट है।
किसी आदेश को चलते रहने देने के लिए, भले ही आप विंडो बंद कर दें, या कनेक्शन गिर जाए, या सत्र अन्यथा बाधित हो, आपको अस्वीकृत आदेश का उपयोग करके पृष्ठभूमि कार्य को अस्वीकार करना होगा।
disown %1
ऊपर, 1 . की जॉब आईडी वाला बैकग्राउंड जॉब अस्वीकृत है। यह वर्तमान शेल से डिस्कनेक्ट हो गया है और तब तक चलता रहेगा जब तक कि यह समाप्त नहीं हो जाता है या कोई त्रुटि नहीं आती है या इसे KILL कमांड का उपयोग करके मार दिया जाता है।
सभी चल रही प्रक्रियाओं को सूचीबद्ध करने का तरीका देखने के लिए यह लेख देखें – अगर आपको उन कार्यों को ट्रैक करने की आवश्यकता है, जिन्हें आपने अस्वीकृत किया है, तो आपको इसकी आवश्यकता हो सकती है ।
चल रहे कमांड को बैकग्राउंड में ले जाना
चल रहे कमांड को बैकग्राउंड में ले जाने के लिए, आपको इसे निलंबित करना होगा, फिर इसे बैकग्राउंड में ले जाना होगा।
ऐसा करने के लिए, जब आदेश चल रहा हो, CTRL + Z press दबाएं . आपको कुछ ऐसा दिखाई देगा:
suspended command_name
...कमांड की पुष्टि करना निलंबित कर दिया गया है।
फिर, बीजी दर्ज करें कमांड को बैकग्राउंड में चलाना जारी रखने के लिए कमांड:
bg
आपको कुछ ऐसा दिखाई देगा
continued command_name
...यह पुष्टि करते हुए कि कमांड अब बैकग्राउंड में चल रही है।