यदि आपको 'nohup' की आवश्यकता है, तो आप पहले से ही '&' का उपयोग कर रहे हैं?


26

पहले यह सवाल संबंधित है लेकिन निश्चित रूप से यह बहुत अच्छा सवाल नहीं है:

नोह, डिसाइड और & के बीच अंतर

मैं कुछ समझना चाहता हूं: जब मैं 'और' करता हूं, तो मैं सही समझ रहा हूं?

क्या यह "नोहप ... और" या केवल और पर्याप्त करने के लिए उपयोगी है?

क्या कोई ऐसा मामला दिखा सकता है जहाँ आप 'और' का उपयोग कर रहे हों और फिर भी 'nohup' का उपयोग करना चाहते हों?


1
क्या आपने स्वीकृत उत्तर और उसकी टिप्पणी धागा पढ़ा है? वे बताते हैं कि क्या nohupकरता है। आपने किस भाग को भ्रमित किया है?
गिल्स एसओ- बुराई को रोकना '

3
@ गिल्स: यह आपके लिए स्पष्ट हो सकता है , क्योंकि आप इन चीजों से परिचित होना चाहते हैं (अपना प्रतिनिधि देखा) ... हालाँकि, एक शुरुआत के लिए, मैंने जो लिंक दिया था उसमें स्वीकृत उत्तर का उपयोग करने के बारे में एक शब्द नहीं कहता है दोनों nohup और 'और' ... मैं कर रहा हूँ यकीन है कि मेरे सवाल का स्पष्ट पर्याप्त और दूसरे से अलग करने के लिए पर्याप्त है, और दो महान जवाब यहां है साबित होता है कि लगता है, ) इसके अलावा, क्या आप वास्तव में यह कह रहे हैं कि मैंने दर्द को दूसरे प्रश्न से जोड़ने के लिए लिया था, लेकिन बिना स्वीकृत उत्तर को पढ़े !?
सेड्रिक मार्टिन

जवाबों:


32

सबसे पहले, हर बार जब आप एक कमांड निष्पादित करते हैं, तो आप एक नई प्रक्रिया को खोल देंगे, भले ही आप इसे चलाएं &या नहीं। &केवल इसका मतलब है कि आप इसे पृष्ठभूमि में चला रहे हैं।

ध्यान दें यह बहुत सटीक नहीं है। कुछ कमांड, जैसे cdशेल फ़ंक्शन हैं और आमतौर पर एक नई प्रक्रिया को कांटा नहीं जाएगा। type cmdआमतौर पर आपको बताएगा कि क्या cmdएक बाहरी कमांड या शेल फ़ंक्शन है। type typeआपको बताता है कि typeस्वयं एक शेल फ़ंक्शन है।

nohupकुछ अलग है। यह नई प्रक्रिया को अनदेखा करने के लिए कहता है SIGHUP। यह कर्नेल द्वारा भेजा गया संकेत है जब मूल शेल बंद हो जाता है।

अपने प्रश्न का उत्तर देने के लिए निम्नलिखित कार्य करें:

  1. रन emacs & (डिफ़ॉल्ट रूप से एक अलग एक्स विंडो में चलना चाहिए)
  2. पैरेंट शेल पर, दौड़ें exit

आप देखेंगे कि emacsपृष्ठभूमि में चलने के बावजूद खिड़की को मार दिया गया है। यह डिफ़ॉल्ट व्यवहार है और nohupइसे संशोधित करने के लिए सटीक रूप से उपयोग किया जाता है।

पृष्ठभूमि में नौकरी चलाना ( &या bg, मैं शर्त लगाता हूं कि अन्य गोले में अन्य वाक्यविन्यास भी हैं) एक शेल विशेषता है, जो आधुनिक सिस्टम की मल्टीटास्क से क्षमता है। हर कार्यक्रम आप लांच करना चाहते हैं, आधुनिक गोले के लिए एक नया खोल उदाहरण forking के बजाय ( bash, zsh, ksh, ...) प्रोग्राम (या की सूची का प्रबंधन करने की क्षमता होगी नौकरियों )। एक समय में उनमें से केवल एक अग्रभूमि पर हो सकता है , जिसका अर्थ है कि यह शेल फ़ोकस हो जाता है। मैं चाहता हूं कि कोई व्यक्ति अग्रभूमि में चल रही प्रक्रिया और पृष्ठभूमि में एक के बीच के अंतर पर अधिक विस्तार कर सकता है (मुख्य एक stdin/ से अधिक होने के नाते stdout)।

किसी भी मामले में, यह उस तरीके को प्रभावित नहीं करता है जिस तरह से बच्चे की प्रक्रिया प्रतिक्रिया करती है SIGHUPnohupकर देता है।


महान जवाब के लिए आप दोनों के लिए +1 ... लेकिन मैं अभी भी भ्रमित हूं ... मैंने कोशिश की कि मेरे सवाल का जवाब देने से पहले: शायद मेरा (बहुत पुराना) डेबियन लिनक्स सेटअप सही तरीके से कॉन्फ़िगर नहीं किया गया है, लेकिन अगर मैं "एमएसीएस" "और फिर" बाहर निकलें "टाइप करें, केवल मेरा xterm बाहर निकलता है: emacs वहां रहता है।
सेड्रिक मार्टिन

Emacs इतना जटिल है कि यह अपने आप SIGHUP को संभाल सकता है। यह केवल डिफ़ॉल्ट रूप से होता है जो प्रक्रियाएं SIGHUP पर बाहर निकलती हैं। Ntpd या inetd जैसे बहुत से 'डेमॉन' प्रोग्राम बाहर निकलने के बजाय SIGHUP पर उनके कॉन्फ़िगरेशन को फिर से पढ़ेंगे। मैं खुद एक विम लड़का हूं, इसलिए मुझे किसी भी एमास के साथ ज्यादा अनुभव नहीं है।
ब्रूस एडिगर

3
Emacs के बारे में कुछ खास नहीं है। एक शेल आम तौर SIGHUPपर अपने बच्चे की प्रक्रियाओं को भेजता है जब शेल स्वयं प्राप्त करता है SIGHUP, न कि जब शेल सामान्य रूप से बाहर निकलता है। बैश के पास एक विकल्प है huponexitजो SIGHUPइसे बाहर निकलने पर बच्चों को भेजने का कारण बनता है, लेकिन यह डिफ़ॉल्ट रूप से सक्षम नहीं है। gnu.org/software/bash/manual/bashref.html#Signals
कीथ थॉम्पसन

नमस्ते। सबसे पहले, महान विवरण। मैंने एक प्रक्रिया चलाकर आपकी थीसिस को सत्यापित करने की कोशिश की और दौड़ &कर अपना खोल बंद कर दिया exit। प्रक्रिया अभी भी चल रही है। यह क्यों मारा गया है पर कोई विचार? या मुझसे यहां कुछ छूट रहा है?
अली यिलामज़

आप क्या प्रक्रिया चला रहे हैं?
रहमू

16

क्या ऐसा करना कभी उपयोगी है nohup ... &? हाँ। यदि आप एक प्रक्रिया "पृष्ठभूमि में" के साथ शुरू करते हैं &, तो उस नई प्रक्रिया में अभी भी मूल शेल के "प्रोसेस ग्रुप" में सदस्यता है। यदि वह शेल या प्रक्रिया समूह को निश्चित संकेत मिलते हैं (उदाहरण के लिए, उदाहरण के लिए), तो वे बाहर निकल जाते हैं। इसका मतलब यह है कि यदि आप &एक xterm, या rxvt या कुछ अन्य विंडो टर्मिनल एमुलेटर द्वारा शुरू किए गए शेल से प्रक्रिया चलाते हैं , तो जब आप विंडो बंद करते हैं, तो पृष्ठभूमि प्रक्रिया एक SIGHUP हो जाती है। अधिकांश कैजुअली-लिखित कोड SIGHUP को हैंडल नहीं करता है, और इसलिए बाहर निकलता है।

यदि आप ऐसा करते हैं nohup ... &, तो nohupआदेश अनदेखा करने के लिए SITEUP सेट करता है, और फिर कमांड निष्पादित करता है। जब तक कि नया सिग्नल कमांड nohupसेटअप नहीं कर देता, तब तक सिग्नल मास्क रखता है। यदि आप xterm या rxvt या जो कुछ भी बंद करते हैं, कर्नेल SITUP को कमांड की प्रक्रिया में वितरित करता है, जिसे अनदेखा कर दिया जाता है। यह चलता रहता है।

nohupएक आदेश पर कर रहा है यह आपको xterm को बंद करने के बाद चालू रखने की अनुमति देता है, या आप लॉग ऑफ करते हैं।


क्षमा करें - आपने मुझे खो दिया। आप कह रहे हैं कि का उपयोग कर &के साथ nohupकुछ मामलों में आदेश चल रहता है, जहां केवल का उपयोग कर nohupनहीं है? इसका उत्तर यहाँ दिया गया है: unix.stackexchange.com/a/288064/1822
माइक बी

2
@MikeB - "और" कमांड को "बैकग्राउंड" में रखने के लिए सामान्य फोर्क / सेट / कॉल सिस्टम को निष्पादित करता है। यही है, जो कमांड nohupped है वह अतुल्यकालिक रूप से चल रहा है। nohupपहले कुछ काम करता है exec()काँटेदार प्रक्रिया खास संकेतों की अनदेखी करने के लिए सिस्टम कॉल। तो, हाँ, एक "और" एक कमांड को कुछ परिस्थितियों में चलाने की अनुमति देगा जो एक सादे पुराने nohupनहीं होगा। जैसे कि नोक से जुड़े शेल से जुड़े एक्सटर्म को बंद करना, या लॉग ऑफ करना।
ब्रूस एडगर

-1

यदि आप लिनक्स ऑपरेटिंग सिस्टम पर बैकग्राउंड में (और प्रत्यय के रूप में) प्रोग्राम चलाते हैं और उसके बाद भी लॉगआउट करते रहेंगे: इसके साथ प्रयास करें:

  ping google.com > ping_result  &

लॉगिन बैक के बाद आउटपुट फ़ाइल में लाइनों की संख्या की जांच करें जो ping_resultबढ़ते रहेंगे मतलब यह अभी भी चल रहा है हालांकि यह बताया गया है कि इसे बंद कर दिया जाएगा। फिर nohupकमांड का क्या उपयोग है ।

एक और परिदृश्य ==> जैसा कि ऊपर कहा गया है nohup emac &-> जिसे emacसिस्टम लॉगआउट के बाद भी चलते रहना चाहिए, लेकिन यह लॉगिन बैक के बाद नहीं चलता है।

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