से man nohup
:
यदि मानक इनपुट एक टर्मिनल है, तो इसे / dev / null से पुनर्निर्देशित करें। यदि मानक आउटपुट एक टर्मिनल है, nohup.out
तो यदि संभव हो तो आउटपुट जोड़ें $HOME/nohup.out
। यदि मानक त्रुटि एक टर्मिनल है, तो इसे मानक आउटपुट पर पुनर्निर्देशित करें। उत्पादन करने के लिए फ़ाइल को बचाने के लिए, का उपयोग करें nohup COMMAND > FILE
।
(टिप्पणियों के आधार पर पूरी तरह से संशोधित)
जब एक शेल से बाहर निकलते हैं या टर्मिनल बंद करते हैं, तो बच्चे की प्रक्रियाओं को साइटअप (हैंगअप) भेजा जाएगा, यह नाम उस समय से उत्पन्न होता है जब टर्मिनल यूनिक्स कंप्यूटर में डायल करेंगे) उन्हें यह बताने के लिए कि टर्मिनल नहीं है अब जुड़ा हुआ है। इसके अतिरिक्त, जब शेल प्रक्रिया समाप्त हो जाती है, तो चाइल्ड प्रोसेस की स्टड, स्टडआउट और स्टेडर स्ट्रीम बंद हो जाएगी। आमतौर पर इसके कारण बच्चे की मृत्यु हो जाती है। आमतौर पर यह एक अच्छी बात है क्योंकि यह बिना किसी उपयोगकर्ता के साथ चलने वाली प्रक्रियाओं को छोड़ देता है।
nohup
कार्यक्रम का उद्देश्य शेल समाप्त होने और टर्मिनल डिस्कनेक्ट होने के बाद भी प्रक्रिया को चालू रखना है। जैसे, इसके आउटपुट को टर्मिनल पर निर्देशित करना उद्देश्य को पूरी तरह से हरा देता है। मेरा मूल उत्तर ( nohup COMMAND | cat
) सहायक नहीं था क्योंकि: जब टर्मिनल बंद हो जाता है, तो बिल्ली का आउटपुट बंद हो जाता है और इसलिए बिल्ली मर जाती है जो पाइप को तोड़ देती है और नूप प्रक्रिया को एक SIGPIPE भेजती है जिससे यह मर जाता है। मैंने बिना सोचे समझे प्रश्न का उत्तर दे दिया था।
अपने उद्देश्य को प्राप्त करने के लिए, nohup COMMAND > FILE
आउटपुट को डायरेक्ट करने के लिए फ़ाइल का नाम चुनें। फिर tail -f FILE
एक टर्मिनल पर आउटपुट देखने के लिए उपयोग करें।
इसी तरह, कोई भी निम्नलिखित शेल कंस्ट्रक्शन का उपयोग कर सकता है: COMMAND >FILE 2>&1 </dev/null &
एक कमांड चलाने के लिए जिसकी stdio धाराएं टर्मिनल से जुड़ी नहीं हैं और टर्मिनल बंद होने के बाद भी चलती रह सकती हैं। इसके अतिरिक्त, zsh में, शेल-बिलिन को चलाने के disown
लिए zsh को यह बताएं कि शेल समाप्त होने पर इसे मारने के बजाय प्रक्रिया को छोड़ दें।