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