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