सबसे पहले; एक बार जब आप एक प्रक्रिया शुरू कर देते हैं, तो आप इसे पहले (हिट Ctrl- Z) को रोककर bg
पृष्ठभूमि में फिर से शुरू करने के लिए टाइप करके इसे पृष्ठभूमि कर सकते हैं। यह अब एक "नौकरी" है, और इसके stdout
/ stderr
/ stdin
अभी भी आपके टर्मिनल से जुड़े हुए हैं।
आप इसके अंत तक "&" जोड़कर एक प्रक्रिया शुरू कर सकते हैं:
firefox &
खामोश पृष्ठभूमि में इसे चलाने के लिए, इसका उपयोग करें:
firefox </dev/null &>/dev/null &
कुछ अतिरिक्त जानकारी:
nohup
एक ऐसा प्रोग्राम है, जिसका उपयोग आप अपने एप्लिकेशन को चलाने के लिए कर सकते हैं ताकि इसके स्टडआउट / स्टॉडर को इसके बजाय किसी फ़ाइल में भेजा जा सके और इस तरह कि पैरेंट स्क्रिप्ट को बंद करने से बच्चे को कोई परेशानी न हो। हालाँकि, आवेदन शुरू करने से पहले आपको इसका उपयोग करने की दूरदर्शिता होनी चाहिए। nohup
काम करने के तरीके के कारण , आप इसे केवल एक रनिंग प्रक्रिया पर लागू नहीं कर सकते ।
disown
एक बैश बिलिन है जो शेल की जॉब लिस्ट से शेल जॉब को हटा देता है। क्या यह मूल रूप से मतलब है कि आप उपयोग कर सकते हैं नहीं है fg
, bg
अब और उस पर है, लेकिन अधिक महत्वपूर्ण बात, जब आप अपने खोल बंद लटका या नहीं भेजेंगे SIGHUP
अब और उस बच्चे के लिए। इसके विपरीत nohup
, प्रक्रिया शुरू होने और पृष्ठभूमि के बादdisown
इसका उपयोग किया जाता है ।
आप जो नहीं कर सकते , उसे शुरू करने के बाद एक प्रक्रिया के stdout / stderr / stdin को बदल दें। कम से कम शेल से तो नहीं। यदि आप अपनी प्रक्रिया लॉन्च करते हैं और यह बताते हैं कि इसका स्टडआउट आपका टर्मिनल है (जो कि आप डिफ़ॉल्ट रूप से करते हैं), तो उस प्रक्रिया को आपके टर्मिनल पर आउटपुट के लिए कॉन्फ़िगर किया गया है। आपके शेल का प्रक्रियाओं की एफडी सेटअप के साथ कोई व्यवसाय नहीं है, यह विशुद्ध रूप से कुछ प्रक्रिया है जो स्वयं प्रबंधित करता है। यह प्रक्रिया स्वयं तय कर सकती है कि इसके स्टडआउट / स्टैडर / स्टडिन को बंद करना है या नहीं, लेकिन आप इसे करने के लिए बाध्य करने के लिए अपने शेल का उपयोग नहीं कर सकते हैं।
बैकग्राउंड प्रोसेस के आउटपुट को प्रबंधित करने के लिए, आपके पास स्क्रिप्ट्स से बहुत सारे विकल्प होते हैं, "नोहप" संभवतः सबसे पहले दिमाग में आता है। लेकिन इंटरेक्टिव प्रक्रियाओं के लिए आप शुरू करते हैं लेकिन चुप रहना भूल गए ( firefox < /dev/null &>/dev/null &
) आप वास्तव में बहुत कुछ नहीं कर सकते।
मैं आपको जीएनयू प्राप्त करने की सलाह देता हूं screen
। स्क्रीन के साथ आप केवल अपने रनिंग शेल को बंद कर सकते हैं जब प्रक्रिया का आउटपुट एक परेशान हो जाता है और एक नया खोल देता है ( ^Ac
)।
ओह, और वैसे भी, " $@
" का उपयोग न करें जहाँ आप इसका उपयोग कर रहे हैं।
$@
इसका मतलब है, $1
, $2
, $3
..., जो में अपने आदेश की बारी जाएगा:
gnome-terminal -e "vim $1" "$2" "$3" ...
शायद यह नहीं है कि आप क्या चाहते हैं, क्योंकि वे केवल एक तर्क लेते हैं। $1
यह दिखाने के लिए उपयोग करें कि आपकी स्क्रिप्ट केवल एक तर्क को संभाल सकती है।
आपके द्वारा दिए गए (के साथ gnome-terminal -e
) परिदृश्य में ठीक से काम करने वाले कई तर्कों को प्राप्त करना वास्तव में मुश्किल है क्योंकि -e
केवल एक तर्क है, जो एक शेल कमांड स्ट्रिंग है। आपको अपने तर्कों को एक में बदलना होगा। सबसे अच्छा और सबसे मज़बूत, बल्कि बदरंग, रास्ता ऐसा है:
gnome-terminal -e "vim $(printf "%q " "$@")"