बैकग्राउंड में कमांड कैसे सेट करें, टर्मिनल को बंद करें और इसे वापस एफजी पर लाएं?


10

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

उदाहरण:

$ grunt &
$ jobs
$ [1]+  Running  grunt &

बेशक टर्मिनल बंद करने के बाद कोई भी नौकरी नहीं मिली है।

अगला उदाहरण:

$ grunt & disown #the same behavior has: $ setsid grunt &
$ jobs
$ [nothing] #but ps shows that grunt is working

after close terminal, grunt doesn't work

मैंने गलत क्या किया? क्या कोई मुझे समझा सकता है कि पृष्ठभूमि में कमांड को कैसे चलाना है और इसे अग्रभूमि में वापस लाना है।

जवाबों:


11

यह उस तरह से असंभव है जैसा आप चाहते हैं।

आइए कुछ बुनियादी अवधारणाओं की समीक्षा करें:

  • एक प्रक्रिया समूह संबंधित प्रक्रियाओं का एक संग्रह है जिसे सभी एक ही बार में संकेतित किया जा सकता है।
  • एक सत्र प्रक्रिया समूहों का एक संग्रह है, जो या तो एकल टर्मिनल डिवाइस (कंट्रोलिंग टर्मिनल के रूप में जाना जाता है) से जुड़ा हुआ है या किसी भी टर्मिनल से जुड़ा नहीं है।

यदि आपने टर्मिनल को बंद कर दिया है, तो सत्र में सभी प्रक्रियाएं मृत हो गई हैं, सिवाय उन (डेमॉन) के जो इनिट प्रक्रिया में वापस आ गए हैं। और उन्हें फिर से एक नियंत्रित टर्मिनल देने का कोई तरीका नहीं है।

एक शब्द में, POSIX सिस्टम में प्रक्रिया पुनर्संतलन अत्यधिक प्रतिबंधित है (डीमॉनेटाइजिंग एक अपवाद है) और आपकी आवश्यकताओं को संतुष्ट नहीं किया जा सकता है।


6
तकनीकी रूप से यह सही उत्तर है, लेकिन मेरा मानना ​​है कि जिन आगंतुकों को यह समस्या हो रही है, वे स्क्रीन / ब्योबू / tmux का उल्लेख करते हुए अन्य उत्तरों में "उनके समाधान" पाएंगे।
प्रोग्रामर

आप सही हैं .. लेकिन मेरे दृष्टिकोण से, सिस्टम को बेहतर ढंग से काम करने और जो आप चाहते हैं और गलत कर रहे हैं उसे समझने के लिए बुनियादी अवधारणाएं अधिक महत्वपूर्ण हैं। तुम दोनों को धन्यवाद!
तैमूर फैज़्रखमानोव

16
  1. स्थापित करें screen:

    sudo apt-get install screen
  2. प्रारंभ करें screen:

    screen -S session_name
  3. अपनी आज्ञाओं का पालन करें जो आपको चाहिए।

  4. screenटर्मिनल से अलग करें (आपके आदेश अभी भी चल रहे हैं):

    प्रेस CTRL+ a+d

  5. टर्मिनल बंद करें

  6. एक और टर्मिनल खोलें और पिछले screenसत्र को फिर से लिखें :

    screen -r

अधिक जानकारी के लिए और screenदेखने के लिए अतिरिक्त विकल्प man screen


2
स्क्रीन या बायोबू (खासकर यदि आप ubuntu चल रहे हैं)। बायोबू स्क्रीन पर आधारित है अगर मैं सही हूं, लेकिन मुझे पता है कि इसकी अतिरिक्त कार्यक्षमता है जो मुझे उपयोगी और उपयोग करने में आसान है, लेकिन यह राय का विषय है।
प्रोग्रामर

धन्यवाद अच्छा सुझाव! हो सकता है कि यह प्रेम <3 के साथ रूस से सुविधा में की जरूरत है किया जाएगा)!
तैमूर Fayzrakhmanov

@Programster, हाँ, बायोबु पूर्व है। स्क्रीन। इसमें बायोबु-स्क्रीन और बायोबु-टमक्स दोनों हैं।
user.dz

1
मैं tmuxएक विकल्प के रूप में सलाह देता हूं screen
गेरिट

5

क्या आपने कोशिश की है: byobuया tmuxजो टर्मिनल मल्टीप्लेक्सर हैं। ठीक वही नहीं जो आप ढूंढ रहे हैं, लेकिन यह समान व्यवहार है।

byobu-screen

फिर अपनी कमांड चलाएं, अलग करने के लिए:

byobu-screen -d

फिर से शुरू करने के लिए:

byobu-screen -r

Https://help.ubuntu.com/community/Screen देखें


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