ऐसे कई मामले हैं जब पर्यावरण के बीच छोटे अंतर आपको काट सकते हैं। यह वह है जिसमें मैंने हाल ही में भाग लिया है। इन दोनों आज्ञाओं में क्या अंतर है?
1 ~ $ nohup myprocess.out &
2 ~ $ myprocess.out &
उत्तर हमेशा की तरह ही है - यह निर्भर करता है।
nohup हैंगअप सिग्नल को पकड़ता है जबकि एम्परसेंड नहीं करता है।
हैंगअप सिग्नल क्या है?
SIGHUP - हैंगअप टर्मिनल को नियंत्रित करने या नियंत्रण प्रक्रिया की मृत्यु (मूल्य: 1) पर पाया गया।
सामान्य रूप से, शेल के उपयोग और उसके बाद कमांड को चलाने के बाद, शेल हैंगअप सिग्नल (जैसे कि किल-राइट्स $ पीआईडी) के साथ उप-कमांड को समाप्त कर देगा। यह नोह का उपयोग करने से रोका जा सकता है, क्योंकि यह सिग्नल को पकड़ता है और इसे अनदेखा करता है ताकि यह वास्तविक एप्लिकेशन तक कभी न पहुंचे।
ठीक है, लेकिन इस मामले में हमेशा 'buts' होते हैं। इन लॉन्चिंग विधियों के बीच कोई अंतर नहीं है जब शेल को इस तरह से कॉन्फ़िगर किया जाता है, जहां यह SIGHUP बिल्कुल भी नहीं भेजता है।
यदि आप बैश का उपयोग कर रहे हैं, तो आप यह निर्दिष्ट करने के लिए नीचे दिए गए आदेश का उपयोग कर सकते हैं कि क्या आपका शेल अपने बच्चे की प्रक्रियाओं के लिए SITEUP भेजता है या:
~ $ shopt | grep hupon
और इसके अलावा - ऐसे मामले हैं जहां नोहुप काम नहीं करता है। उदाहरण के लिए, जब आप प्रक्रिया शुरू करते हैं तो NOHUP सिग्नल को पुन: जोड़ देता है (यह अंदर किया जाता है, एप्लिकेशन कोड स्तर पर)।
वर्णित मामले में, मतभेदों में कमी मुझे तब आती है जब एक कस्टम सर्विस लॉन्चिंग स्क्रिप्ट के अंदर एक दूसरी स्क्रिप्ट के लिए एक कॉल होता है जो बिना नॉनहैप कमांड के उचित एप्लिकेशन सेट अप और लॉन्च करता है।
एक लिनक्स वातावरण पर सब कुछ सुचारू रूप से काम करता है, एक दूसरे पर एक आवेदन छोड़ दिया जैसे ही दूसरा स्क्रिप्ट बाहर निकलता है (उस मामले का पता लगाते हुए, निश्चित रूप से मुझे और अधिक समय लगा तो आप सोच सकते हैं: अटक_आउट_टॉन्ग :)।
दूसरे स्क्रिप्ट के लिए एक लॉन्चिंग विधि के रूप में नोहप को जोड़ने के बाद, एप्लिकेशन चल रहा है, भले ही स्क्रिप्ट से बाहर निकल जाएगा और यह व्यवहार दोनों वातावरणों पर सुसंगत हो गया।