nohupऔर वास्तव में एक ही चीज disown -hनहीं हैं ।
इसके साथ disown, मौजूदा इंटरैक्टिव शेल में नौकरियों की सूची से एक प्रक्रिया को हटा दिया जाता है। jobsबैकग्राउंड प्रोसेस शुरू करने और रनिंग के बाद रनिंग disownउस प्रक्रिया को शेल में नौकरी के रूप में नहीं दिखाएगी। HUPजब यह बाहर निकलता है (लेकिन अंत में नोट देखें) तो एक प्रसिद्ध नौकरी खोल से प्राप्त नहीं होगी ।
के साथ disown -h, नौकरी को नौकरी की सूची से नहीं हटाया जाता है, लेकिन HUPयदि यह बाहर निकलता है , तो शेल इसे संकेत नहीं भेजेगा (लेकिन अंत में नोट देखें)।
nohupउपयोगिता पर ध्यान नहीं देता HUPसंकेत दिया और उपयोगिता शुरू होता है। उपयोगिता सिग्नल मास्क को इनहेरिट करती है nohupऔर इसलिए HUPसिग्नल की अनदेखी भी करेगी । जब शेल समाप्त हो जाता है, तो यह प्रक्रिया एक बच्चे की प्रक्रिया के रूप में बनी रहती है nohup(और nohupफिर से पैरेंटेड होती है init)।
अंतर यह है कि संकेत भेजने वाले की परवाह किए बिना nohupउपेक्षा के साथ प्रक्रिया शुरू हुई HUP। अस्वीकृत प्रक्रियाओं बस नहीं कर रहे हैं भेजा एक HUPसंकेत खोल से , लेकिन अभी भी जैसे से संकेत भेजा जा सकता है kill -s HUP <pid>और इस पर ध्यान न दें नहीं होंगे।
ध्यान दें कि HUPकेवल एक शेल की नौकरियों के लिए भेजा जाता है अगर
- शेल एक लॉगिन शेल है और
huponexitशेल विकल्प सेट है, या
- शेल अपने आप में एक
HUPसंकेत देता है।
bashमैनुअल से प्रासंगिक बिट्स (मेरा जोर):
सिग्नल
[...]
एक के प्राप्त होने परSIGHUP शेल डिफ़ॉल्ट रूप से बाहर निकलता है । बाहर निकलने से पहले, एक इंटरेक्टिव शेल SIGHUPसभी नौकरियों के लिए, रनिंग या बंद हो जाता है। बंद नौकरियों SIGCONTको यह सुनिश्चित करने के लिए भेजा जाता है कि वे प्राप्त करें
SIGHUP। शेल को किसी विशेष कार्य के लिए सिग्नल भेजने से रोकने के लिए, इसे जॉब टेबल से disownबिलिन ( SHELL BUILTIN COMMANDSनीचे देखें) के साथ हटा दिया जाना चाहिए या SIGHUP
उपयोग न करने के लिए चिह्नित किया जाना चाहिए disown -h।
यदि huponexitशेल विकल्प के साथ सेट किया गया है shopt, तो इंटरएक्टिव लॉगिन शेल से बाहर निकलने पर सभी नौकरियों को bashभेजता
SIGHUPहै।
disown [-ar] [-h] [jobspec ... | pid ... ]
विकल्पों के बिना, jobspecसक्रिय नौकरियों की तालिका से प्रत्येक को हटा दें । [...] यदि -hविकल्प दिया जाता है, तो प्रत्येक jobspecको तालिका से हटाया नहीं जाता है , लेकिन इसे चिह्नित किया जाता है, ताकि SIGHUPशेल के प्राप्त होने पर नौकरी पर न भेजा जाएSIGHUP । [...]
सम्बंधित:
nohup, तो आपको TTY से दूर stdin / stdout / stderr को पुनर्निर्देशित करने की आवश्यकता है (अपने मूल शेल को एक से जुड़ा होना चाहिए)। (ओटीओएच, मैं वास्तव में एक अहंकारी हार्डकोड जैसे डिफ़ॉल्ट पर भरोसा करने से बेहतर अभ्यास पर विचार करता हूं./nohup.out)।