Tl, डॉ:
sleepजब मैं लॉग आउट करता हूं और टर्मिनल बंद रहता है तो प्रक्रिया क्यों बच सकती है? मेरे दिमाग में, डेमॉन और nohupकार्यक्रमों को छोड़कर सब कुछ लॉगआउट के दौरान मारा जाएगा। अगर sleepइस तरह से बच सकते हैं, तो क्या इसका मतलब यह है कि मैं इस पद्धति का उपयोग nohupकमांड के बजाय कर सकता हूं ?
जब तक bashउदाहरण के द्वारा पैदा की sshहै huponexitविकल्प सेट, कोई प्रक्रिया बाहर निकलने पर किसी भी मतलब द्वारा समाप्त किया जाएगा / लॉग आउट करें और जब huponexitविकल्प सेट किया गया है, का उपयोग कर kill -9खोल पर उपयोग करने के लिए एक अच्छा विकल्प नहीं है nohupखोल के बच्चे की प्रक्रिया पर; nohupशेल के बच्चे की प्रक्रिया अभी भी उन्हें शेल से नहीं आने वाले SUPUP से सुरक्षित रखेगी, और तब भी जब यह महत्वपूर्ण नहीं nohupहै तब भी इसे पसंद नहीं किया जाएगा क्योंकि यह शेल को शान से समाप्त करने की अनुमति देता है।
इसमें bashएक विकल्प होता है huponexit, जिसे यदि सेट bashआउट / लॉगआउट पर अपने बच्चों को SITEUP बना देगा ;
इंटरएक्टिव नॉन-लॉगिन bash उदाहरणों में, जैसे कि bashउदाहरण के द्वारा gnome-terminal, इस विकल्प को अनदेखा किया जाता है; चाहे huponexitवह सेट हो या bashपरेशान bash, बाहर निकलने से बच्चे कभी भी बीमार नहीं होंगे ;
इंटरेक्टिव लॉगिन bash इंस्टेंस में, जैसे कि bashउदाहरण के द्वारा ssh, इस विकल्प को अनदेखा नहीं किया जाता है (हालाँकि यह डिफ़ॉल्ट रूप से परेशान है); यदि huponexitसेट किया गया है, तो bashबच्चों को bashबाहर निकलने / लॉगआउट करने से साइटअप हो जाएगा ; यदि कोई परेशान है huponexit, तो bashबच्चों के bashबाहर निकलने / लॉगआउट करने से SIGHUPped नहीं होगा ;
इसलिए सामान्य रूप से एक इंटरेक्टिव लॉगिन bashउदाहरण से बाहर निकलने / लॉगिंग करने के लिए, जब तक कि huponexitविकल्प सेट नहीं किया जाता है, शेल को अपने बच्चों को SITEUP नहीं बनायेगा, और एक इंटरैक्टिव गैर-लॉगिन bashउदाहरण से बाहर निकलने / लॉगिंग करने से शेल अपने बच्चों को SITEUP नहीं बना सकेगा परवाह किए बिना;
हालाँकि, यह इस मामले में अप्रासंगिक है: उपयोग करने kill -9 sleepकी परवाह किए बिना बच जाएगा, क्योंकि इसकी मूल प्रक्रिया ( bash) को मारने से बाद वाले को पूर्व के लिए कुछ भी करने का मौका नहीं मिलेगा (जैसे, यदि वर्तमान bashउदाहरण एक लॉगिन bashउदाहरण था और huponexitविकल्प सेट किया गया था, इसे SIGHUP करने के लिए)।
अन्य संकेतों के विपरीत इसे जोड़ना (जैसे एक SIGHUP संकेत भेजा जाता है bash), एक SIGKILL सिग्नल को कभी भी किसी प्रक्रिया की बाल प्रक्रियाओं के लिए प्रचारित नहीं किया जाता है, इसलिए sleepइसे भी नहीं मारा जाता है;
nohupSIGHUP संकेतों के लिए एक प्रक्रिया प्रतिरक्षा शुरू करता है, जो कुछ अलग है; यह SIGHUP सिग्नल के रिसेप्शन पर लटकने वाली प्रक्रिया को रोक देगा, जो कि इस bashमामले में huponexitविकल्प के सेट होने और शेल से बाहर निकलने की स्थिति में इंटरेक्टिव लॉगिन इंस्टेंस द्वारा प्राप्त किया जा सकता है ; इसलिए तकनीकी रूप से विकल्प के साथ nohupएक इंटरेक्टिव लॉगिन bashइंस्टेंस में एक प्रक्रिया शुरू करने के लिए उपयोग करने से huponexitविकल्प प्रक्रिया को एक साइट सिग्नल के रिसेप्शन पर लटकने से रोक देगा, लेकिन शेल से बाहर निकलने / लॉगिंग करने के बावजूद इसे अलग नहीं करेगा;
सामान्य तौर पर, हालांकि, जब nohupमाता-पिता के खोल से आने वाले सिग्नल संकेतों को रोकने की आवश्यकता होती है , तो चाइल्ड पद्धति पर kill -9माता-पिता की विधि पर पसंद करने का कोई कारण नहीं है nohup; इसके बजाय, यह विपरीत होना चाहिए।
kill -9विधि का उपयोग करते हुए माता-पिता को मारना माता- पिता के लिए शालीनता से बाहर निकलने का मौका नहीं छोड़ता है, जबकि nohupविधि का उपयोग करके बच्चे को शुरू करना माता-पिता को अन्य संकेतों द्वारा समाप्त करने की अनुमति देता है, जैसे कि SIGHUP (एक उदाहरण बनाने के लिए जो संदर्भ में समझ में आता है एक बच्चे ने उपयोग करना शुरू कर दिया nohup), जो इसे इनायत से बाहर निकलने की अनुमति देता है।
&पृष्ठभूमि (डेमन की तरह) के लिए प्रक्रिया को कांटा जाएगा और आप लॉग आउट होने के बाद भी लगातार चल रहे हैं।