सत्र को समाप्त करने के बाद प्रक्रियाओं को कैसे चालू रखा जाए?


644

मान लीजिए कि मैं ssh सत्र से प्रक्रियाओं का एक गुच्छा लॉन्च करता हूं। क्या रिमोट मशीन पर चलने वाली प्रक्रियाओं को बनाए रखते हुए ssh सत्र को समाप्त करना संभव है?


जवाबों:


750

आपको आधुनिक विकल्पों की तलाश करनी चाहिए tmux

tmuxscreenकई कारणों से श्रेष्ठ है , यहाँ कुछ उदाहरण दिए गए हैं:

  • विंडोज को सत्र के बीच ले जाया जा सकता है और यहां तक ​​कि कई सत्रों से जोड़ा जा सकता है
  • विंडोज को क्षैतिज और लंबवत रूप से पैन में विभाजित किया जा सकता है
  • UTF-8 और 256 रंग टर्मिनलों के लिए समर्थन
  • सत्र दर्ज करने की आवश्यकता के बिना सत्र से शेल को नियंत्रित किया जा सकता है

बुनियादी कार्यक्षमता

अनुशंसा के उत्तर में बताई गई समान कार्यक्षमता प्राप्त करने के लिए screen, आपको निम्नलिखित कार्य करने होंगे:

  • रिमोट मशीन में ssh
  • शेल में tmuxटाइप करके शुरू करेंtmux
  • प्रारंभ tmuxसत्र के अंदर इच्छित प्रक्रिया शुरू करें
  • + और फिर tmuxटाइप करके सत्र को छोड़ें / अलग करेंCtrlbd

अब आप सुरक्षित रूप से रिमोट मशीन से लॉग इन कर सकते हैं, आपकी प्रक्रिया अंदर ही चलती रहेगी tmux। जब आप फिर से वापस आते हैं और अपनी प्रक्रिया की स्थिति की जांच करना चाहते हैं, जिसका उपयोग आप tmux attachअपने tmuxसत्र में संलग्न करने के लिए कर सकते हैं ।

यदि आप कई सत्रों को साथ-साथ चलाना चाहते हैं, तो आपको प्रत्येक सत्र का नाम Ctrl+ bऔर का उपयोग करना चाहिए $। आप वर्तमान में चल रहे सत्रों की एक सूची प्राप्त कर सकते हैं tmux list-sessions, अब कमांड के साथ एक रनिंग सत्र संलग्न करें tmux attach-session -t 0

tmuxएक सत्र में एक खिड़की को संभालने की तुलना में बहुत अधिक उन्नत चीजें कर सकते हैं। अधिक जानकारी के लिए man tmuxया tmux GitHub पृष्ठ पर एक नज़र डालें । विशेष रूप से, यहाँscreen और के बीच मुख्य अंतर के बारे में अक्सर पूछे जाने वाले प्रश्न हैं tmux


4
यदि आपके पास केवल एक स्क्रीन सत्र सक्रिय है, तो @ CigigM का उपयोग करें screen -x -r [screenname]या screen -rxकम करें । यह आपको एक मौजूदा स्क्रीन उदाहरण संलग्न करने की अनुमति देता है।
लेकेनस्टेयेन

5
इस सलाह ने मुझे उसी समस्या से निपटने में मदद की लेकिन मुझे लगता है कि इसमें एक टाइपो भी शामिल है। मैं बहुत यकीन है कि आप टाइप करने की आवश्यकता कर रहा हूँ Ctrl-bऔर उसके बाद dको छोड़ने के लिए / अलग में tmuxसत्र। निश्चित रूप से यह tmuxमेरे Ubuntu 12.04 के संस्करण के मामले में है ।
cxrodgers

17
उपरोक्त निर्देशों का पालन करते हुए मैंने एक गलती की। मैं इसे साझा करूंगा यदि कोई भी एक ही गलती में पड़ सकता है: मैंने दूरस्थ कंप्यूटर के शेल के बजाय अपने स्वयं के कंप्यूटर के शेल में tmux शुरू किया। दूरस्थ कंप्यूटर के खोल में tmux शुरू करने की आवश्यकता है।
मर्ट नुहग्लू

5
स्क्रीन अब फिर से विकसित की जा रही है: lists.gnu.org/archive/html/screen-devel/2014-04/msg00024.html क्या आप अपना उत्तर अपडेट कर सकते हैं?
मूरू

4
वैकल्पिक रूप से, tmux detachटाइप करने के बजाय चलाएंctrl-b d
एंड्रयू

305

विकल्प 1: nohup

सबसे अच्छा तरीका अक्सर सबसे सरल होता है।

nohup long-running-command &

यह विशेष रूप से इसके लिए बनाया गया था, यह भी stdout को लॉग करता है nohup.log

man nohup

विकल्प 2: bg

यदि आप कुछ पहले से चल रहे कार्यों को "पृष्ठभूमि" करना चाहते हैं, तो आपका सबसे अच्छा शर्त Ctrl+ है Zतो चलाएं

bg

अपने सबसे हाल के निलंबित कार्य को पृष्ठभूमि में रखने के लिए, जिससे वह चालू रहे।

फिर एक त्वरित disownआपको लॉग आउट करने के बाद प्रक्रिया को चालू रखना चाहिए।

screenऔर अन्य लोग इसे कर सकते हैं, लेकिन यह वह नहीं है जिसके लिए वे हैं। मैं उन nohupकार्यों के लिए सलाह देता हूं जिन्हें आप जानते हैं कि आप bgअपने पहले से चल रहे कार्यों के लिए पीछे छूट जाते हैं और फिर से शुरू नहीं करना चाहते हैं।

ध्यान रखें, दोनों बैश स्पेसिफिक हैं। यदि आप बैश का उपयोग नहीं कर रहे हैं, तो कमांड अलग हो सकते हैं।


4
मैं करने की सलाह disown -h
मिशेल

दिलचस्प स्क्रीन और tmux खान में काम करने के लिए काम नहीं करता है, bur nohup काम करता है
यासीन ओकुमुस

1
bg+ disownमेरे लिए काम नहीं किया। मेरे पास एक परिनियोजन स्क्रिप्ट चल रही थी जिसे मैं tmux के अंदर शुरू करना भूल गया, और बैठक के लिए जल्दी निकलने की आवश्यकता थी। स्क्रिप्ट लगातार शेल में प्रगति करती है। ctrl+zप्रक्रिया को रोक दिया, मुझे बैश करने के लिए लौट रहा है। bgइस प्रक्रिया को फिर से शुरू किया, लेकिन इसने स्थिति को कोसने के लिए फिर से शुरू करना शुरू कर दिया, जिससे यह देखना असंभव हो गया कि मैं क्या टाइप कर रहा था। हालाँकि, एक disownकमांड ने "
डिसऑन

यह मेरे julia myFile.jlलिए जो भी कारण के साथ काम नहीं किया । tmux करता है और महान है।
किग्रागेट्राउट

इसने मेरे लिए काम किया, बहुत बहुत धन्यवाद
चाड

207

आप ऐसा करके उपयोग कर सकते हैं screen

man screenअधिक जानने के लिए लिखें या इस स्क्रीन मैन पेज को पढ़ें ।

सरल परिदृश्य:

  • अपने दूरस्थ बॉक्स में ssh। टाइप करें screenफिर अपनी मनचाही प्रक्रिया शुरू करें।

  • प्रेस Ctrl- Aतो Ctrl- D। यह आपके स्क्रीन सत्र को "अलग" कर देगा लेकिन आपकी प्रक्रियाओं को चालू रखेगा। अब आप दूरस्थ बॉक्स से लॉग आउट कर सकते हैं।

  • यदि आप बाद में वापस आना चाहते हैं, तो फिर से लॉग ऑन करें और screen -rयह आपके स्क्रीन सत्र को "फिर से शुरू" टाइप करेगा, और आप अपनी प्रक्रिया का आउटपुट देख सकते हैं।


32
मैं आमतौर पर अपने स्क्रीन सत्रों को नाम दूंगा screen -S nameताकि बाद में सही से कनेक्ट करना आसान हो सके।
डेविड वनिल

लिंक नीचे है
Gab Gab

1
व्यक्तिगत रूप से, मैं बिना किसी पैकेज कंट्रोल सॉफ्टवेयर के एक बॉक्स पर काम कर रहा हूं। TMUX के लिए लगभग आधे घंटे की इमारत निर्भरता (जो मुझे व्यक्तिगत रूप से और जैसा अनुभव है) स्रोत से खर्च करने के बाद, यह स्पष्ट हो गया कि स्क्रीन मेरे लिए बेहतर और सरल उपाय था। टीएल; डीआर: इस समस्या का इष्टतम समाधान उपयोग मामले, मशीन, और आपको सेट होने में कितना समय है पर निर्भर करता है। इस उत्तर के लिए धन्यवाद :)
मैक्स वॉन हिप्पेल 3

screen -Sपहले छुट्टी के साथ संयोजन और screen -rजब वापस आना अद्भुत है!
मेलोमन

इसके लिए धन्यवाद। इस समाधान ने मेरे लिए काम किया जबकि tmux ने नहीं किया (मैं एक लिनक्स मशीन में ssh'ing करते समय खिड़कियों के लिए बैश के एक संस्करण का उपयोग करता हूं)
माइकल सोरेनसेन

83

स्क्रीन और नोहप बेहतर तरीका है, लेकिन अगर आपको बिना स्क्रीन या नूप के पहले से चल रही प्रक्रिया को अलग करना है तो आप डिसाइड कमांड चला सकते हैं।

disown [-ar] [-h] [jobspec… |pid… ]

विकल्पों के बिना, प्रत्येक जॉबस्पेक को सक्रिय नौकरियों की तालिका से हटा दें । यदि -hविकल्प दिया जाता है, तो नौकरी को तालिका से नहीं हटाया जाता है, लेकिन इसे चिह्नित किया जाता है, ताकि शेल को एक SIGHUP प्राप्त होने पर नौकरी पर नहीं भेजा जाए। यदि जॉबस्पेक मौजूद नहीं है, और न -aतो -rविकल्प की आपूर्ति की जाती है, तो वर्तमान नौकरी का उपयोग किया जाता है। यदि कोई जॉबस्पेक आपूर्ति नहीं करता है, तो -aविकल्प का मतलब सभी नौकरियों को निकालना या चिह्नित करना है; -rएक के बिना विकल्प jobspec तर्क नौकरियों चलाने के लिए संचालन प्रतिबंधित करता है।

डिस्ऑन के साथ आप टर्मिनल को बंद कर सकते हैं और मशीन पर चलने वाली प्रक्रिया प्राप्त कर सकते हैं।


10
यह मेरा पसंदीदा तरीका भी है। मैं अक्सर उपयोगdisown -a && exit
Stefano Palazzo

1
उत्तम। यह एक प्यारा आदेश है और सभी उत्थान के हकदार हैं!
ग्रेग

8
सावधानी के एक शब्द, मैंने Ctrl-Z के साथ एक चलने की प्रक्रिया को रोक दिया disownऔर इसे कॉल करने से पहले पृष्ठभूमि में शुरू नहीं किया और इसे मार दिया।
२१:२० बजे एचडीव

3
यदि यह टर्मिनल पर लिखना चाहता है तो दुर्घटना हो सकती है। किसी रनिंग प्रोसेस का आउटपुट अप्रत्यक्ष करना उतना आसान नहीं है। बेहतर है कि इसे नूप के साथ ठीक से शुरू करें।
जिगगंजर

2
यह एक अच्छा जवाब है, क्योंकि यह सीधे सवाल का जवाब देता है। प्रश्न के लेखक ने पूछा कि लंबे समय तक चलने वाले आदेशों के एक समूह को पहले से ही निष्पादित करने के बाद क्या करना है । इनमें से अधिकांश उत्तर आपको आज्ञाओं पर अमल करने से पहले यह बता देते हैं कि आपको क्या करना है ।
q0rban

53

मैं एक बड़े एमवी में फंस गया था इसलिए मैं प्रक्रिया, सेटअप स्क्रीन को रोकने और फिर इसे फिर से शुरू करने की स्थिति में नहीं था। मैं निम्नलिखित चरणों में अनिवार्य रूप से चल रही प्रक्रिया के साथ ssh सत्र से बाहर निकलने में कामयाब रहा:

  1. ssh [सर्वर]
  2. आदेश
  3. Ctrl+Z
  4. bg
  5. विस्थापित [प्रक्रिया वैकल्पिक वैकल्पिक, पिछले करने के लिए चूक]
  6. बाहर जाएं

चरण 3 वर्तमान प्रक्रिया को रोक देता है (जैसे मेरे 'mv' कमांड)।
चरण 4 पृष्ठभूमि में रुकी हुई प्रक्रिया डालता है और इसे फिर से शुरू करता है।
चरण 5 आपको प्रक्रिया को बाधित करने देता है। ** नौकरी की सूची प्राप्त करने के लिए jobsपहले टाइप करें ।


** (बाश मैनुअल से) अस्वीकृत के बारे में:

disown [-ar] [-h] [jobspec ... | pid ... ]
              Without  options,  remove  each jobspec from the table of active
              jobs.  If jobspec is not present, and neither the -a nor the  -r
              option  is  supplied, the current job is used.  If the -h option
              is given, each jobspec is not removed from  the  table,  but  is
              marked  so  that  SIGHUP  is  not  sent  to the job if the shell
              receives a SIGHUP.  If no jobspec is  supplied,  the  -a  option
              means  to  remove or mark all jobs; the -r option without a job‐
              spec argument restricts operation to running jobs.   The  return
              value is 0 unless a jobspec does not specify a valid job.

2
बिल्ट-इन हमेशा मेरी पहली पसंद है :) THX
ken_oy

यह उत्तर सही के रूप में चिह्नित किया जाना चाहिए। स्थापित करने और इस समस्या को हल करने के लिए स्क्रीन के लिए इस्तेमाल किया जा रहा है अतिरंजित है।
उलरिच-लोरेंज़ श्ल्टर

यह तब बहुत मददगार होता है जब आपने पहले से ही कोई कमांड शुरू कर दी हो और जो लंबे समय से चल रही हो। टीएमयूएक्स सत्र में इसे समाप्त करने और शुरू करने में समय लगेगा
दीपाली मित्तल

1
@ टॉम-ब्रॉसमैन: कृपया इस तरह के अनावश्यक संपादन के लिए बाहर देखें ! यदि नौकरी विनिर्देश के बिना आह्वान किया disownगया है तो अंतर्निहित कमांड सबसे हालिया पृष्ठभूमि की नौकरी पर काम करता है।
डेविड फ़ॉस्टरस्टर

22

कई ssh कनेक्शन पर प्रोग्राम और टर्मिनल स्थिति बनाए रखने के लिए आप दो प्रमुख कार्यक्रमों का उपयोग कर सकते हैं। वे स्क्रीन (अवलंबी, लेकिन दुर्भाग्य से अस्वस्थ हैं। जाहिर तौर पर अब सक्रिय रूप से विकसित हो रहे हैं ) और tmux (नए, सक्रिय रूप से बनाए रखा गया है)। ब्योबू एक सामने का छोर है जो इन प्रणालियों के शीर्ष पर चल सकता है और अतिरिक्त ubuntu स्थिति की जानकारी प्रदान कर सकता है। नई स्थापनाओं पर यह एक बैकएंड के रूप में tmux का उपयोग करेगा, अगर आपके पास byobu की पुरानी स्थापना है और एक मौजूदा कॉन्फिगरेशन है जो पिछले बैकेंड को बनाए रखेगा, यह स्क्रीन या tmux हो।

Byobu

बायोबु को डेबियन-आधारित मशीन में ऐसा करके कंप्यूटर पर स्थापित किया जा सकता है:

sudo aptitude install byobu

यम का उपयोग करते हुए, आप करते हैं

su -c 'yum install byobu'

अन्य वितरणों पर बायोबू को स्थापित करना भी संभव है।

बायोबू का उपयोग करना

आप byobussh का उपयोग करके कनेक्ट करने के बाद होस्ट मशीन पर चलाकर बायोबू शुरू कर सकते हैं। यह आपको एक शेल देगा जो इस तरह दिखता है:

छवि Byobu

आप एक उबंटू मशीन पर बायोबू टर्मिनल का उपयोग -X विकल्प के साथ भी कर सकते हैं और आसानी से पूरी तरह से काम करने वाले बायोबू का उपयोग कर सकते हैं।

उपयोग:

टाइप करके बायोबू शुरू करें byobu

आप मौजूदा सत्र के भीतर एक नई विंडो बनाने के लिए F2 दबा सकते हैं, विभिन्न खिड़कियों के बीच स्विच करने के लिए F3-F4।

बायोबु के बारे में सबसे अच्छी बात यह है कि, आपको टर्मिनल छोड़ने के लिए वास्तव में टर्मिनल में चल रही प्रक्रियाओं को नहीं मारना है। आप अगली बार आने पर अगली बार स्क्रीन / बाईमॉक्स (बायोबू का कंकाल) भेज सकते हैं और फिर से शुरू कर सकते हैं:

  • बायोबू छोड़ने और इसे चलाने के लिए (अलग) F6 दबाएं।
  • अगली बार जब आप आते हैं, तो बस करते हैं byobuऔर जहां आप थे, वहीं वापस हो जाते हैं।

    Byobu-अलग से संलग्न

आप विभिन्न बायोबू सत्र भी बना सकते हैं byobu -S session1। और जब आप वापस आते हैं तो आप उनमें से किसी से भी जुड़ सकते हैं।

आप Byobu का उपयोग करके बहुत कुछ कर सकते हैं। इसका इस्तेमाल करें! कुछ निश्चित गाइड यहाँ , या यहाँ हैं


मैंने एक पुट्टी-आधारित सत्र से अपने उबंटू बॉक्स में बायोबू का उपयोग करने की कोशिश की, लेकिन मुझे स्थिति लाइन बार-बार मिलती है और प्रदर्शन पर स्क्रॉल करती है। हालाँकि यह F6 दबाने पर ठीक से अलग हो जाता है, यह मेरे सेटअप में उपयोग करने योग्य समाधान नहीं था।
जेफमेसियर

1
@jfmessier यह इसलिए है क्योंकि PuTTY ncurses (utf-8 मूल रूप से) अच्छी तरह से नहीं लेता है। इस समस्या को समाप्त करना संभव है इस सूत्र का पालन करके - stackoverflow.com/questions/10731099/…
सिद्धार्थआरटी

यह कमाल का है! 1. यह मुझे एक रंगीन बैश संकेत देता है जिसे मैं अपने डिफ़ॉल्ट शेल के रूप में बैश के साथ सक्षम नहीं कर सकता हूं और 2. मुझे एक ही समय में 2 बॉट चलाने के लिए मिलता है और अभी भी काम करने के लिए एक और टर्मिनल है! @SiddharthaRT आप एक उत्थान के लायक हैं सर!
देव

18

यह प्रक्रिया शुरू होने के बाद आप ऐसा नहीं कर सकते, आपको एक लंबी दौड़ वाली नौकरी चलाने से पहले चीजों को सेट करना होगा।

आप उपयोग कर सकते हैं nohup लेकिन आधुनिक ज्ञान आप अपनी प्रवेश के रूप में स्क्रीन या Byobu उपयोग करें ताकि आप को अलग कर बातें चल छोड़ सकते हैं पता चलता है।

स्क्रीन का यह फायदा है कि आप एक मशीन से अलग कर सकते हैं और दूसरे से रीटैच कर सकते हैं जो काम के दिन के अंत तक चलने वाली लंबी चलने वाली प्रक्रियाओं पर जांच करना चाहते हैं।

यहाँ स्क्रीन के लिए एक उचित गाइडिंग शुरू हो रही है।

बायोबू मेनू के साथ स्क्रीन के शीर्ष पर इंटरफ़ेस का उपयोग करना आसान बनाता है। यह नए ubuntu पर स्क्रीन का वर्तमान कार्यान्वयन भी है। F2 एक नया टर्मिनल F3 / F4 शुरू करने के लिए आगे और पीछे F6 को डिस्कनेक्ट करने के लिए। वास्तव में स्थायी रूप से टर्मिनलों को समाप्त करने के लिए बाहर निकलें टाइप करें।


byobu इन दिनों tmux का उपयोग करता है ..
7

12
"प्रक्रिया शुरू होने के बाद आप ऐसा नहीं कर सकते, आपको लंबे समय तक चलने वाली नौकरी चलाने से पहले चीजों को सेट करना होगा।" - नहीं, आप इसे disownप्राप्त करने के लिए उपयोग कर सकते हैं । @ बस्सी का जवाब देखें
रिच

1
स्क्रीन और tmux सीखने के लिए संघर्ष करने के बाद .... बायोबू ने मेरी आँखों में आँसू ला
दिए

disownऔर अगर बस जरूरत है Ctrl-z, तो bgइसे सक्रिय टर्मिनल और पृष्ठभूमि पर लाने के लिए। फिर, disown
मैमोरिला

8

अरे, जबकि मैं सहमत था कि स्क्रीन सबसे अधिक प्रभावशाली विकल्प है। आप vncserver का उपयोग कर सकते हैं और फिर उस पर प्रक्रिया शुरू कर सकते हैं।

इसके अलावा अगर आपका एकमात्र इंटरस चलने की प्रक्रिया है और इसके नियंत्रण को वापस लेने की आवश्यकता नहीं है, और पूरी तरह से सबसे महत्वपूर्ण है कि आप जानते नहीं थे कि आपको सत्र बंद करने की आवश्यकता होगी और आपके पास पहले से चल रही प्रक्रिया है, तो आप भाग्य के नहीं हैं आप खोल के रूप में बैश का उपयोग करते हैं

सबसे पहले आपको Ctrl + Z टाइप करके बैकग्राउंड में प्रोसेस भेजना होगा, उसके बाद bg% 1 (यह संख्या जॉब नंबर पर निर्भर करती है, आमतौर पर यह 1 है, लेकिन आप कमांड जॉब का उपयोग करके आसानी से सूची खींच सकते हैं)

अंत में कमांड को डिसाइड करें (जॉब के बाद ... बीजी कमांड के साथ ही)

यह आपके शेल और पृष्ठभूमि में प्रक्रिया के बीच माता-पिता-बच्चे के संबंध को हटा देगा, यह आपके शेल को समाप्त होने पर मरने से रोक देगा।


2
यह उत्तर सबसे अच्छा है! हर कोई क्यों बात कर रहा है screen, इस सवाल को पोस्ट-लॉगिन इवेंट, कैसे प्रक्रियाओं को चालू रखने के लिए, लॉग इन करने के बाद, लेकिन उन्हें शुरू करने से पहले रखा गया था। शानदार जवाब, जॉर्ज, आपने वास्तव में मेरी मदद की है! :)
jwbensley

1
बस bg(बिना %1) अक्सर पर्याप्त होता है, क्योंकि डिफ़ॉल्ट वर्तमान नौकरी है
वाल्टर ट्रॉस

एक व्यापक उत्तर देना अच्छा होगा: एक प्राथमिकता (अग्रिम में स्थापित करना): एएससीआई टर्मिनल स्क्रीन (पुराना), tmux (neewer); एक्स विंडो: vnc (पुराना, अभी भी बनाए रखा गया है), xpra (नया), xpra जड़ रहित होने के साथ। एक पोस्टीरियर (आपके शुरू होने के बाद कायम रहना): ^ Z, डिसऑन, ... लेकिन मैं इससे ज्यादा मांस के लिए आलसी हूं।
क्रेजी गेलव

8

एक एकल शेल स्क्रिप्ट के लिए जो मेरे पास लंबे समय से चल रहा है, मैं '&' का उपयोग करके पृष्ठभूमि में प्रक्रिया को लॉग इन करूंगा और चलाऊंगा।

उदाहरण:

/path/to/my/script &

मैंने लॉग आउट किया है और अपने SSH सत्र को काट दिया है। जब मैं कुछ समय बाद लॉग इन करता हूं, तो स्क्रिप्ट से निरंतर डेटा संग्रह द्वारा सिद्ध किया गया स्क्रिप्ट अभी भी निष्पादित हो रहा है।


3
हां, मैं यह जानना चाहूंगा कि इस सरल समाधान से स्क्रीन / tmux कैसे बेहतर है।
मैड्स स्केजर्न

हां, मैं इसे अपने ubuntu पर भी देख सकता हूं, लेकिन यह सिद्धांत में नहीं होना चाहिए। मुझे समझ नहीं आ रहा है कि
डैनियल पिन्योल

1
@MadsSkjern क्योंकि आप इस पद्धति का उपयोग करके स्क्रिप्ट में कोई भी इनपुट दर्ज नहीं कर सकते हैं।
केन शार्प

1
@MadsSkern कारण यह है कि यदि आप इस तरह की प्रक्रिया चलाते हैं &यदि आप लॉग आउट करते हैं और अपने SSH सत्र में, प्रक्रिया अभी भी चल रही है, हालांकि आप उस प्रक्रिया का आउटपुट नहीं देख पाएंगे (यदि आपकी स्क्रिप्ट आपको कुछ प्रतिध्वनित करती है) इसे नहीं देखेंगे, लेकिन अगर यह एक फ़ाइल लिखता है तो फ़ाइल वहाँ होगी)
DarkCygnus

4

आपको जीएनयू स्क्रीन की जांच करनी चाहिए और देखना चाहिए कि क्या यह आपकी मदद करता है। आपको वास्तविक समय में चलाने के लिए आपको किस तरह से आवेदन करने की आवश्यकता है, इसके आधार पर, यह हल करने की तुलना में अधिक मुद्दों का कारण हो सकता है, लेकिन कम से कम यह आपको अपने सत्र को फिर से शुरू करने की अनुमति देगा जैसे कि आपने इसे कभी नहीं छोड़ा।

कैसे इस्तेमाल करे :

  • screenपहली शुरुआत के लिए कमांड का उपयोग करें , परिचय संदेशों के माध्यम से स्क्रॉल करें, आपको एक टर्मिनल सौंपा जाना चाहिए।
  • सीएसी एक और टर्मिनल खोलता है
  • Ca Ck एक टर्मिनल को मारता है
  • टर्मिनलों के माध्यम से साइकिल चलाने के लिए आप सीए सी-स्पेस और सीए सी-बैकस्पेस का उपयोग कर सकते हैं
  • यदि आप ज्यादातर दो टर्मिनलों का उपयोग कर रहे हैं, तो Ca Ca आसान है
  • Ca Cd वर्तमान स्क्रीन सत्र को अलग करता है और स्क्रीन से बाहर निकलता है। फिर आप screen -rउस सत्र को फिर से शुरू करने के लिए उपयोग कर सकते हैं । आपके पास एक बार में कई अलग-अलग स्क्रीन सत्र हो सकते हैं, इस मामले में आपको उपलब्ध सत्रों की एक सूची दिखाई जाएगी।

कई अन्य विकल्प हैं, उदाहरण के लिए विभाजित स्क्रीन, और सभी शॉर्टकट भी पूरी तरह से अनुकूलन योग्य हैं।


3

सरलतम उत्तर ...

ctrl + z रनिंग प्रोग्राम को सस्पेंड करेगा

"बीजी" इसे पृष्ठभूमि में चलाएगा


5
प्रक्रिया को बाधित किए बिना (जैसे disownया कुछ के साथ nohup), यह आमतौर पर एसएसएच सत्र की समाप्ति के बाद प्रक्रिया को चालू नहीं रखेगा।
एलिया कागन

3
मेरे Ubuntu सर्वर पर, डिफ़ॉल्ट सेटअप के साथ, यह वास्तव में चलता रहता है!
मैड्स स्केजर्न

3

सबसे आसान तरीका पृष्ठभूमि में अपनी कमांड को चलाना है &। तो बस लिखें:

disown -a

0

जबकि हर कोई उपयोग करने के लिए कहता है disown(आपके द्वारा पहले से ही प्रक्रिया शुरू करने के बाद आपके पास एकमात्र विकल्प), nohupया यहां तक ​​कि कमांड चलाना screen, जो उपयोगी है यदि आप कमांड से सभी आउटपुट देखना चाहते हैं ... मैं इसका प्रशंसक हूं screen.. मैंने अभी भी सबसे हाल ही में लिनक्स के मुख्यधारा के वितरण की कोशिश की है और बस पृष्ठभूमि में काम करना और छोड़ना सभी प्रक्रियाओं का कारण नहीं है जो मरने के लिए चल रहे हैं। एक वैश्विक सेटिंग या कुछ होना चाहिए। मैं कुछ सुंदर पुराने सिस्टम (स्लैकवेयर 12) पर यह कोशिश कर रहा हूं और जब तक मैं इसे मैन्युअल रूप से नहीं मारता, तब तक मेरी टेस्ट स्क्रिप्ट चलती रहती है:

shell$ cat > test.pl

#!/usr/bin/perl
while(1){
     sleep(1);
}
    shell$ perl ./test.pl &
    shell$ exit
    logout
    shell$ ps aux test.pl
    mymom 31337     1  0 13:25 ?        00:00:00 perl ./test.pl
    shell$ 

जबकि मैं मानता हूं कि screenइसे चलाने का सबसे अच्छा तरीका होगा, भले ही मेरी स्क्रिप्ट ने फ़ाइलों को लॉग करने के लिए लिखा हो या जो भी हो .. मुझे कभी भी उपयोग करने की आवश्यकता नहीं है disown -a या nohupजब तक कि यह पूर्ण व्यामोह से बाहर न हो। हो सकता है कि कोई व्यक्ति इस बात पर कुछ प्रकाश डाल सकता है कि कैसे डिफ़ॉल्ट रूप से व्यवहार होता है? हो सकता है कि कुछ सिस्टम प्रशासक सिस्टम को ओवरलोड करने से अपने उपयोगकर्ताओं की प्रक्रियाओं को बनाए रखने के लिए बड़े गोले पर चूक को बदल दें?


यदि आपके पास कोई और प्रश्न है, तो कृपया इसे एक नए प्रश्न के
heemayl

0

दुर्भाग्य से, एक समाप्त SSH सत्र के परिणामस्वरूप tmux या स्क्रीन बंद हो सकता है। ऐसा इसलिए है क्योंकि systemdसत्र से बाहर प्रवेश करने पर किसी भी बच्चे की प्रक्रिया समाप्त हो जाएगी।

आप इस सेटिंग को अपने logind.conf( /etc/systemd/logind.conf) में बदल सकते हैं :

KillUserProcesses=no

Https://unix.stackexchange.com/questions/490267 में जवाब देने के लिए धन्यवाद ।


-1

के बजाय :

cmd options; 

पहले जोड़ें nohup:

nohup cmd options & 

फिर, आप कंसोल को स्टडआउट द्वारा देख पाएंगे:

tail -f nohup.out
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.