अतुल्यकालिक खोल आदेश


100

मैं कमांड शुरू करने के लिए शेल स्क्रिप्ट का उपयोग करने की कोशिश कर रहा हूं। मुझे परवाह नहीं है कि क्या / कब / कैसे / क्यों खत्म होता है। मैं प्रक्रिया शुरू और चलाना चाहता हूं, लेकिन मैं तुरंत अपने शेल में वापस आने में सक्षम होना चाहता हूं ...


2
संबंधित, यूनिक्स और लिनक्स स्टैक एक्सचेंज पर नोह, डिसाइड और & के बीच अंतर देखें ।
jww

1
अधिक गहराई वाले उत्तर की तलाश करने वालों के बीच nohup, &और disownचौथे अंतर पर स्क्रॉल करने के लिए , यहाँ क्लिक करें
नं। .ꞍʇʎԀʎɥʇʎԀʎ

जवाबों:


116

आप पृष्ठभूमि में स्क्रिप्ट चला सकते हैं:

$ myscript &

ध्यान दें कि यह &आपकी स्क्रिप्ट के अंदर डालने से अलग है , जो संभवत: वह नहीं करेगा जो आप चाहते हैं।


1
मुझे पता था कि यह कुछ आसान होने वाला है, धन्यवाद एक टन ... लिनक्स बस मेरी बात नहीं है, लेकिन मैं गति तक पहुंचने की कोशिश कर रहा हूं ... Btw, क्या यह काम तब होगा जब nohup के साथ जोड़ा जाएगा?
लोरेनव्स

2
कमांड लाइन पर और स्क्रिप्ट में डालने के बीच क्या अंतर है? मुझे पता नहीं था कि वे अलग थे।
याकूब शरीफ

8
@JacobSharf, इसे आज़माएँ और आप देखेंगे। यदि &स्क्रिप्ट स्क्रिप्ट के अंदर है और आपके पास नहीं है wait, तो स्क्रिप्ट से बाहर निकलने पर पृष्ठभूमि कमांड को मार दिया जाएगा।
कार्ल नॉरम

ओह। इससे बहुत कुछ पता चलता है। मैं हाल ही में कुछ प्रभाव देख रहा था जो कि इसके कारण होगा। Googling यह वास्तव में मुझे इस पृष्ठ पर ले जाती है। धन्यवाद
याकूब sharf

यदि myscriptटर्मिनल वातावरण को संशोधित करता है, तो पूर्व। यह एक टर्मिनल इनिशियलाइज़ेशन कमांड है जिसकी तुरंत आवश्यकता नहीं है और इसमें देरी हो सकती है, क्या यह अभी भी टर्मिनल वातावरण को संशोधित करेगा?
no --zɐɹƆ

58

सब लोग भूल गए disown। तो यहाँ एक सारांश है:

  • & काम को पृष्ठभूमि में रखता है।

    • यह इनपुट पढ़ने के प्रयास पर ब्लॉक करता है, और
    • शेल इसके पूरा होने की प्रतीक्षा नहीं करता है।
  • disown शेल के नौकरी नियंत्रण से प्रक्रिया को हटा देता है, लेकिन यह अभी भी टर्मिनल से जुड़ा हुआ है।

    • परिणामों में से एक यह है कि शेल इसे नहीं भेजेगा SIGHUP(यदि शेल प्राप्त करता है SIGHUP, तो यह SIGHUPप्रक्रिया को भी भेजता है , जो सामान्य रूप से प्रक्रिया को समाप्त करने का कारण बनता है)।
    • और जाहिर है, यह केवल पृष्ठभूमि की नौकरियों के लिए लागू किया जा सकता है (क्योंकि जब आप एक अग्रभूमि नौकरी चल रही है तो आप इसे दर्ज नहीं कर सकते हैं)।
  • nohupटर्मिनल से प्रक्रिया को डिस्कनेक्ट करता है, इसके आउटपुट को रीडायरेक्ट करता है nohup.outऔर इसे से ढाल देता है SIGHUP

    • प्रक्रिया किसी भी भेजा प्राप्त नहीं होगा SIGHUP
    • यह पूरी तरह से नौकरी नियंत्रण से स्वतंत्र है और सिद्धांत रूप में भी अग्रभूमि नौकरियों के लिए इस्तेमाल किया जा सकता है (हालांकि यह बहुत उपयोगी नहीं है)।
    • आमतौर पर &(एक पृष्ठभूमि नौकरी के रूप में) के साथ प्रयोग किया जाता है ।

मैं disownडेबियन या ओएस एक्स पर नहीं मिल सकता। मैंने सोचा कि यह एक कार्यक्रम था, लेकिन मुझे गलत लगता है। यह क्या है?
jww


6
यह सबसे अच्छा जवाब है। सबसे व्यापक।
नं .ɐɹƆɥʇʎԀʎ

3
निश्चित रूप से सबसे अच्छा जवाब, पता नहीं क्यों इतना छोटा है
HeberLZ

1
@ व्लादगंशीन नं।
एनी मेनन

39
nohup cmd

जब आप टर्मिनल बंद करते हैं तो हैंगअप नहीं होता है। डिफ़ॉल्ट रूप से आउटपुट nohup.out पर जाता है

आप इसे पृष्ठभूमि के साथ जोड़ सकते हैं,

nohup cmd &

और आउटपुट से छुटकारा पाएं,

nohup cmd > /dev/null 2>&1 &

आप disownएक कमांड भी कर सकते हैं । टाइप cmd, Ctrl-Z, bg,disown


2
कूल, पागल कैसे सब कुछ जोड़ती है, मुझे लगता है कि ऑर्डरिंग मुझे पहले मिल जाएगी, लेकिन मुझे लगता है कि आप इसे केवल याद कर सकते हैं (आपने क्या लिखा था या "nohup cmd &> / dev / null 2> & 1" :))
लोरिएव्स

मैं आज रात पर ठोकर खाई। मैं 2 दिनों से एक शेल स्क्रिप्ट के साथ लड़ रहा हूं और इस सुझाव से काम चल रहा है। बहुत बहुत धन्यवाद!
JD लॉन्ग

बहुत बढ़िया, यह बहुत उपयोगी है। बैकग्राउंड मोड में चलने पर, आप कमांड के आउटपुट को हर एक बार उपयोग करने के बाद देख सकते हैं tail nohup.out, यह कमांड आउटपुट के अंतिम 10 लाइनों को प्रदर्शित करेगा। मैं इसका उपयोग rsync बैकअप जॉब्स के लिए करता हूं ताकि यह देखा जा सके कि वर्तमान में यह किस फ़ाइल पर है।
मार्टिन हैनसेन

यदि मैं ऐसा करता हूं तो क्या होगा, लेकिन पृष्ठभूमि की प्रक्रिया को रोकना चाहते हैं?
Stephan Bijzitter

जब आप इस उद्देश्य के लिए एक नौकरी शुरू करते हैं तो शेल एक नौकरी पहचानकर्ता को प्रिंट करता है। आप किसी भी समय अपनी दौड़ती नौकरियों को देख सकते हैं jobs
ट्रिपल

26

वैकल्पिक रूप से, प्रोग्राम चलने के बाद, आप Ctrl-Z को हिट कर सकते हैं जो आपके प्रोग्राम को रोक देता है और फिर टाइप करता है

bg

जो आपके अंतिम रुके हुए प्रोग्राम को पृष्ठभूमि में रखता है। (उपयोगी है अगर आपकी शुरुआत 'और' के बिना कुछ है और फिर भी इसे बिना दोबारा शुरू किए बैकग्रांउड में चाहते हैं)


2
धन्यवाद, यह एक अच्छा सा चाल है ... वास्तव में कुछ खोल अच्छाई की सराहना करने के लिए शुरू ...
लॉरेनवीस

3

screen -m -d $command$एक अलग सत्र में कमांड शुरू करता है। आप screen -rप्रारंभ सत्र के लिए संलग्न करने के लिए उपयोग कर सकते हैं । यह एक अद्भुत उपकरण है, जो दूरस्थ सत्रों के लिए भी बेहद उपयोगी है। पर और अधिक पढ़ें man screen


@LadenkovVladislav मैं 95% निश्चित हूं कि आप RedHat पर स्क्रीन स्थापित कर सकते हैं। मेरे पास CentOS है।
बुविंजे

उबंटू पर, मैं विंडोज / बैच "स्टार्ट" कमांड का अनुकरण करना चाहता था। यानी एसिंक्रोनस रूप से एक अग्रभूमि (गुई) प्रोग्राम लॉन्च करें, और शेल स्क्रिप्ट के माध्यम से जारी रखें। यह ठीक यही करता है।
बुविंज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.