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