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