Zsh से बाहर निकलें, लेकिन दौड़ने वाली नौकरियों को खुला छोड़ दें?


95

बस बैश से zsh में बदल गया।

बैश में, शेल के बाहर निकलने पर पृष्ठभूमि के कार्य चलते रहते हैं। उदाहरण के लिए, यहाँ dolphinजारी है exit:

$ dolphin .
^Z
[1]+  Stopped                 dolphin .
$ bg
[1]+ dolphin . &
$ exit

यह वही है जो मैं डिफ़ॉल्ट व्यवहार के रूप में चाहता हूं।

इसके विपरीत, zsh का व्यवहार चालू नौकरियों के बारे में चेतावनी देना है exit, फिर उन्हें बंद करें यदि आप exitफिर से। यहाँ उदाहरण के लिए, dolphinतब बंद किया जाता है जब दूसरा- exitयुआन वास्तव में शेल से बाहर निकलता है:

 % dolphin .
^Z
zsh: suspended  dolphin .
 % bg
[1]  + continued  dolphin .
 % exit
zsh: you have running jobs.
 % exit 

मैं यहाँ bash की तरह zsh का डिफ़ॉल्ट व्यवहार कैसे करूँ?

जवाबों:


168

प्रोग्राम को इसके साथ शुरू करें &!:

dolphin &!

&!( या समतुल्य&| ) दोनों के लिए एक zsh विशेष शॉर्टकट है पृष्ठभूमि और त्याग देते प्रक्रिया, जैसे कि खोल से बाहर निकलते समय से चल रहा है यह छोड़ देंगे।


2
पूर्णता के लिए, क्या आप यह भी सूचीबद्ध कर सकते हैं कि एक बार पहले से ही शुरू हो जाने के बाद उसे कैसे डिस्क्राइब किया जाए?
trusktr

@trusktr अग्रभूमि प्रक्रिया को भंग करने के बारे में एक अलग सवाल है । मुझे लगता है कि स्पष्टता के लिए इसे अलग रखा गया है। विशेष रूप से zsh में रुचि रखने वाले किसी व्यक्ति के लिए, मैंने U & L SE पर एक प्रश्न पूछा है कि अग्रभूमि प्रक्रिया को भंग करने के लिए एक तेज़ वर्कफ़्लो कैसे बनाया जाए
Anko

मुझे यह समाधान पसंद है और मैं इसे व्यक्तिगत आदेशों के लिए लागू करूंगा, लेकिन मैं अभी भी Zsh के डिफ़ॉल्ट व्यवहार को बदलने का एक तरीका ढूंढ रहा हूं।
विंस

1
@ विन्स का मतलब है कि पृष्ठभूमि की प्रक्रियाओं को हमेशा के लिए डिफॉल्ट में बदलना? यदि हां, तो आप setopt nohupअपने साथ ऐसा कर सकते हैं ~/.zshrc। तब के साथ शुरू की गई एक कमांड शुरू &करना भी हमेशा इसे भंग कर देगा। हालाँकि डिफ़ॉल्ट रूप से zsh आपको यह याद दिलाएगा कि जब आप बाहर निकलने का प्रयास करते हैं तो आपके पास नौकरी चल रही होती है। आप इसे भी बंद कर सकते हैं setopt nocheckjobs
अंको

@ मुझे लगता setopt nocheckjobsहै कि मुझे जो चाहिए वो करता है। अब मुझे इसमें उपलब्ध विकल्प मिल गए हैं man zshoptions। मैं चेतावनी को बंद करना चाहता हूं। मुझे पता है कि जब मेरे पास पृष्ठभूमि की प्रक्रिया है और मुझे इसकी आवश्यकता नहीं है। जब तक मैंने उनके साथ शुरुआत नहीं की, मैं पृष्ठभूमि प्रक्रियाओं को बंद करना पसंद करूंगा nohup। मैं वर्तमान में एक शेल फ़ंक्शन के साथ इसका उपयोग करता हूं जो पृष्ठभूमि में PyCharm चलाता है nohup। जब मैं टाइप pycharm .करता हूं तो यह चलता है nohup charm $@ &। जब मैं टर्मिनल बंद करता हूं तो यह बंद नहीं होता है, लेकिन मुझे अभी भी यह चेतावनी मिलती है और exitदो बार टाइप करना पड़ता है ।
विंस

59

से zsh प्रलेखन :

HUP

... zsh में, यदि आपके पास शेल से बाहर आने पर पृष्ठभूमि की नौकरी चल रही है, तो शेल यह मान लेगा कि आप चाहते हैं कि उसे मार दिया जाए; इस मामले में यह एक विशेष संकेत भेजा जाता है जिसे कहा जाता है SIGHUP... यदि आप अक्सर ऐसे काम शुरू करते हैं जो शेल के बाहर निकल जाने पर भी होने चाहिए, तो आप विकल्प निर्धारित कर सकते हैं NO_HUP, और पृष्ठभूमि की नौकरियां अकेले रह जाएंगी।

तो बस NO_HUPविकल्प सेट करें :

% setopt NO_HUP

यदि आप चेतावनी नहीं चाहते हैं, हाँ।
कार्ल नॉरम

30

मैं पाया है के संयोजन का उपयोग कि nohup, &है, और disownमेरे लिए काम करता है, के रूप में मैं स्थायी रूप से रोजगार के अवसर जब खोल से बाहर निकल गया है चलाने के लिए कारण करने के लिए नहीं करना चाहती।

nohup <command> & disown

सिर्फ एक ओर जहां &में मेरे लिए काम किया है bash, मैं जब केवल का उपयोग कर पाया nohup, &या disownआदेशों चल रहा है, एक स्क्रिप्ट है कि एक जावा रन कमांड कॉल की तरह पर, प्रक्रिया अभी भी जब खोल से बाहर निकल गया है बंद कर देंगे।

  • nohupशेल से कमांड को अनदेखा करता है NOHUPऔर SIGHUPसंकेत देता है
  • & इस प्रक्रिया को पृष्ठभूमि में एक उपशामक में चलाता है
  • disownएक तर्क के बाद (आपकी नौकरियों की सूची में नौकरी संख्या का सूचकांक) शेल SIGHUPको बाल प्रक्रियाओं को संकेत भेजने से रोकता है। disownबिना तर्क के उपयोग करने से यह सबसे हालिया नौकरी के लिए डिफ़ॉल्ट हो जाता है।

मुझे इस पृष्ठ पर जानकारी nohupऔर disownजानकारी मिली , और इस SO उत्तर में जानकारी ।&


5

मैं आमतौर पर screenपृष्ठभूमि की नौकरियों को चालू रखने के लिए उपयोग करता हूं ।

1) एक स्क्रीन सत्र बनाएँ:

screen -S myScreenName

2) अपनी स्क्रिप्ट, सेवाओं, डेमॉन या जो भी लॉन्च करें

3) बाहर निकलें (अलग) स्क्रीन-सत्र के साथ

screen -d

या शॉर्टकट ALT+A then d


कुछ सैकड़ों वर्षों के बाद - यदि आप अपना सत्र फिर से शुरू करना चाहते हैं:

screen -r myScreenName

यदि आप जानना चाहते हैं कि क्या कोई स्क्रीन-सेशन है, तो उसका नाम और उसकी स्थिति (संलग्न या अलग):

screen -ls

यह समाधान सभी टर्मिनल दुभाषियों जैसे बैश, zsh आदि पर काम करता है। See See भी man screen


MacOS उपयोगकर्ताओं के लिए एक नोट, स्क्रीन से अलग करने के लिए कीबोर्ड शॉर्टकट Control + A था, तब D. यह भी मेरा एकमात्र विकल्प था जब मैंने एक प्रक्रिया को छोड़ दिया और दौड़ने के लिए उपज देने के लिए, स्क्रीन -d लिखने में मदद नहीं मिलेगी।
बिशोय

अच्छा है, लेकिन क्यू के साथ कुछ नहीं करना है जो विशेष रूप से है कि कैसे ZSH से बाहर निकलते समय बीजी कार्यों को चालू रखा जाए।
रिचीह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.