"<कमांड> और डिसऑन" और "नोहुप <कमांड> और डिसऑन" के बीच अंतर


41

इसके उपयोग के बारे में मेरी समझ है &, disownऔर nohup:

  • <command>: टर्मिनल के वर्तमान bashउदाहरण के भीतर , अग्रभूमि में प्रक्रिया चलाता है (यानी प्रक्रिया को bashअग्रभूमि नौकरी के रूप में सूचीबद्ध किया गया है stdin, stdoutऔर stderrअभी भी टर्मिनल के लिए बाध्य है ); हैंगअप के लिए प्रतिरक्षा नहीं ;
  • <command> &: टर्मिनल के वर्तमान के भीतर प्रक्रिया चलाता है bash, उदाहरण के लिए पृष्ठभूमि में (यानी प्रक्रिया एक रूप में सूचीबद्ध है bashपृष्ठभूमि नौकरी और stdin, stdoutऔर stderrअभी भी कर रहे हैं टर्मिनल के लिए बाध्य कर ); हैंगअप के लिए प्रतिरक्षा नहीं ;
  • <command> & disown: प्रक्रिया को टर्मिनल की वर्तमान bashआवृत्ति के भीतर , पृष्ठभूमि में चलाता है , लेकिन प्रक्रिया 'नौकरी' की सूची से अलग हो जाती हैbash (अर्थात प्रक्रिया को bashअग्रभूमि / पृष्ठभूमि नौकरी के रूप में सूचीबद्ध नहीं किया जाता है stdin, stdoutऔर stderrअभी भी टर्मिनल के लिए बाध्य है ); हैंगअप के लिए प्रतिरक्षा ;
  • nohup <command> & disown: टर्मिनल के वर्तमान के भीतर प्रक्रिया चलाता है bash, उदाहरण के लिए पृष्ठभूमि में , लेकिन इस प्रक्रिया है से अलग bashहै नौकरियों की सूची (यानी प्रक्रिया एक के रूप में सूचीबद्ध नहीं है, bashअग्रभूमि / पृष्ठभूमि नौकरी और stdin, stdoutऔर stderrकर रहे हैं नहीं अभी भी टर्मिनल के लिए बाध्य ) ; हैंगअप के लिए प्रतिरक्षा ;

तो, एक तरफ से nohup <command> & disownअवरुद्ध stdinऔर पुनः निर्देशित stdoutऔर stderrकरने के लिए nohup.outडिफ़ॉल्ट रूप से, यह मेरे लिए की तरह यह पूरी तरह से के बराबर माना जा सकता है लगता है <command> & disown

क्या उपरोक्त सब सही है? कोई भ्रांति?


1
"हैंगअप से प्रतिरक्षा" और "हैंगअप से प्रतिरक्षा नहीं" से आपका क्या अभिप्राय है?
अराजकता

2
@ कोच का मतलब है कि माता-पिता के bashउदाहरण को समाप्त करना / मारना इस प्रक्रिया को नहीं मारेगा
kos

जवाबों:


32

आपकी समझ मूल रूप से सही है। दोनों disownऔर nohupआपके द्वारा चलाए जा नौकरियों को रोके बिना एक चल खोल सत्र बाहर निकलने के लिए अनुमति देने के लिए उपयोग किया जाता है। कुछ स्पष्टीकरण:

  • चलाने का कोई कारण नहीं है nohup command & disown, nohupपहले से ही आपके लिए इसे रद्द कर दिया जाएगा।

  • nohupहै POSIX द्वारा परिभाषित किया गया है, जबकि disown नहीं है । इस का मतलब है, जबकि कई गोले (जैसे कि bash, zsh, ksh) यह है, दूसरों (उदाहरण के लिए tcsh, csh, dashऔर sh) यह नहीं होगा।

  • disownएक कमांड लॉन्च होने के बाद इस्तेमाल किया जा सकता है जबकि nohupपहले इस्तेमाल किया जाना चाहिए।

जहां तक ​​मैं बता सकता हूं, दोनों कमांडों का वास्तविक प्रभाव समान है। उनमें से प्रत्येक में ऐसी विशेषताएं हैं कि दूसरे का अभाव है (देखें help disownऔर man nohup) लेकिन उनका मूल कार्य समान है, हाँ।

इन उपकरणों की और अधिक विस्तृत चर्चा और उनके बीच के मतभेदों के लिए, यहां दिए गए उत्तरों पर एक नज़र डालें:


11
Nohupऔर disownएक ही बात नहीं कर रहे हैं और दोनों आदेशों का उपयोग करना निरर्थक नहीं है। इस उत्तर को गहराई से वर्णन के लिए देखें
मेमो

7

आपका पहला से तीसरा अंक ठीक लगता है, हालाँकि stdin, stdout and stderr are still bound to the terminalयह सही धारणा नहीं है। stdinहमेशा इस अर्थ में टर्मिनल के लिए बाध्य होता है कि आप हमेशा फ़ाइल नाम को टर्मिनल के माध्यम से कमांड या टर्मिनल के माध्यम से इनपुट करेंगे। stdout and stderr are still bound to the terminalसब ठीक है।

आपके पास stdin, stdout and stderr are not still bound to the terminalचौथे बिंदु में है जो मेरे पूर्व पैराग्राफ में उल्लिखित सही नहीं है। इसके अलावा यहां आप /dev/nullइनपुट फाइल के रूप में उपयोग कर रहे हैं command, उदाहरण के लिए यदि कमांड है cat, तो आप इसका उपयोग कर रहे हैं cat /dev/null

आपके 5 वें बिंदु पर कमांड सही ढंग से नहीं डाली गई है, आपने उपयोग किया है nohup <command> & disown, जबकि किसी एक nohupया disownदूसरे का उपयोग करने की आवश्यकता नहीं है। उनके उद्देश्य समान हैं (अनदेखा करना SIGHUP) लेकिन वे थोड़े अलग तरीके से कार्य करते हैं। तो कमांड को सरल बनाया जा सकता है nohup <command> &

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.