Nohup कमांड का कार्य क्या है?


18

मैं उबंटू में नौसिखिया हूं। मैंने एक कमांड सीखी है

nohup [command]- <command>हैंगअप सिग्नल के लिए प्रतिरक्षा चलाएं

मैं " हैंगअप सिग्नल के लिए प्रतिरक्षा " का अर्थ नहीं समझ सकता । यह किस प्रकार के संकेत की बात कर रहा है? और कृपया मुझे एक उदाहरण के साथ इस कमांड का उपयोग करने का तरीका बताएं।


यदि आपके शेल में उपलब्ध है, disownतो एक बेहतर विकल्प है nohup। के साथ एक कमांड को बैकग्राउंड करें command &या Ctrl-Zफिर disownशेल से अलग करने के लिए उपयोग करें।
जॉन कुगेलमैन मोनिका

@JohnKugelman जो पर्याप्त नहीं है , आपके पास इनपुट, आउटपुट और त्रुटि स्ट्रीम भी है। तो 'nohup' का उपयोग क्यों न करें जो आपके लिए यह स्वचालित रूप से करता है?
चमत्कार 173

जवाबों:


34

हमें विचार करें कि आपने geditएक टर्मिनल से एक पाठ संपादक खोला है और उस पर काम कर रहे हैं। यदि आप बंद करने से पहले टर्मिनल को बंद कर देते हैं gedit, तो टर्मिनल बंद करते ही गेडिट भी बंद हो जाता है। तो यहां पर क्या हो रहा है? geditटर्मिनल के अंतर्गत एक बच्चे की प्रक्रिया के रूप चलाता है। जब आप टर्मिनल को बंद करते हैं तो एक हैंग सिग्नल ( SIGHUP) उस प्रक्रिया को भेजा जाता है जो बच्चे की प्रक्रिया को मारता है।

दूसरी ओर यदि आप चाहते हैं कि आपके बच्चे की प्रक्रिया (यहां gedit) पेरेंट टर्मिनल को बंद करने के बाद भी चलती रहे, तो आप चाहते हैं कि आपकी प्रक्रिया प्रतिरक्षा को हैंगअप सिग्नल दे। ताकि टर्मिनल बंद करने से बच्चे की प्रक्रिया बंद न हो। nohupबिल्कुल यह काम करता है।

nohupटर्मिनल से एक कमांड को डिस्कनेक्ट नहीं करता है , यह आपकी स्क्रिप्ट को SIGHUP को अनदेखा करता है, और stdout / stderr को फाइल nohup.out पर पुनर्निर्देशित करता है, ताकि आप लॉग आउट करने के बाद कमांड को पृष्ठभूमि में चालू रख सकें। यदि आप शेल / टर्मिनल बंद करते हैं या लॉग ऑफ करते हैं, तो आपकी कमांड उस शेल का बच्चा नहीं है। यह init प्रक्रिया के अंतर्गत आता है। यदि आप खोज करते हैं pstreeतो आप देखेंगे कि यह अब प्रक्रिया 1 (init) के स्वामित्व में है। इसे अग्रभूमि में वापस नहीं लाया जा सकता क्योंकि अग्रभूमि अब मौजूद नहीं है।


16

@Sourvac ने जो लिखा उसके अलावा, यह द इन द बैक से दिन की एक विरासत है, जब लोग केवल-केवल डंबल टर्मिनलों के माध्यम से लॉग इन करते हैं, अक्सर (मूल, एनालॉग 110 बॉड) मॉडेम के माध्यम से: "हैंग अप" का शाब्दिक अर्थ है "फोन हैंग करना"। "।

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


1
दिन में ही वापस नहीं। मैं अपनी ज्यादातर बड़ी नौकरियां सर्वर क्लस्टर पर चलाता हूं, जो मैं ssh करता हूं। अगर मैं नोहुप का उपयोग नहीं करता, तो मुझे उन मशीनों से जुड़े अपने लैपटॉप को छोड़ने की ज़रूरत होती है, जो नौकरियों के खत्म होने के इंतजार में दिनों तक रहती हैं।
रे

@ क्या "के माध्यम से" या cron नौकरियों के रूप में उन्हें चलाने के बारे में?
रॉनजॉन

@ रंजन जॉन ज़रूर। या एक ग्रिड इंजन के माध्यम से। मेरा मतलब यह नहीं था कि नोह का केवल एक ही विकल्प था, बस इसका उपयोग आज भी इसी उद्देश्य के लिए किया जाता है।
रे

1
हो सकता है कि आपकी ऐतिहासिक टिप्पणी सही हो। लेकिन इसके वर्तमान महत्व के बारे में आपके निष्कर्ष गलत हैं। यह धीमी गति से कंप्यूटर पर उपयोगी नहीं है, लेकिन यह लंबे समय तक चलने वाली नौकरियों के लिए उपयोगी है। ये दो अलग-अलग चीजें हैं। आप अपने टर्मिनल के इच्छित या अनपेक्षित वियोग के खिलाफ अपनी नौकरी की रक्षा करने के लिए 'नोहूप' का उपयोग करते हैं। यहां तक ​​कि आजकल आप खुश नहीं हैं अगर कोई नौकरी रद्द कर देता है क्योंकि नेटवर्क त्रुटि आपके टर्मिनल को काट देती है और आपकी नौकरी निरस्त हो जाती है।
चमत्कार 173

@ रे क्रॉन जॉब्स इसे हासिल करने के लिए पूरी तरह से अनुपयुक्त हैं। क्रोनोजर आवधिक कार्यों के लिए हैं, आपको क्रोनजोब में वातावरण सेट करना होगा और बहुत सी अन्य चीजों पर विचार करना होगा। हो सकता है कि 'पर' को संभालना थोड़ा आसान हो लेकिन फिर भी नोह से ज्यादा जटिल हो।
चमत्कार 173
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.