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
)।