मौजूदा स्क्रीन सत्र के लिए पुन: प्रशिक्षण


81

मेरा एक कार्यक्रम स्क्रीन के नीचे चल रहा है। वास्तव में, जब मैं सत्र से अलग हो जाता हूं और नेटस्टैट की जांच करता हूं, तो मैं देख सकता हूं कि कार्यक्रम अभी भी चल रहा है (जो मैं चाहता हूं):

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

अब मैं उस प्रक्रिया को चलाने वाले सत्र को फिर से लिखना चाहता हूं। तो मैं एक नया टर्मिनल शुरू करता हूं, और स्क्रीन -r टाइप करता हूं

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

लेकिन मुझे कैसे पता चलेगा कि मैंने जो प्रक्रिया बनाई है, वह कौन सा सत्र है?

अब मेरे द्वारा दिए गए दस्तावेजों में से एक ने कहा:

"जब आप एक विंडो का उपयोग कर रहे हैं, तो इसे नाम देने के लिए Ca A टाइप करें। यह नाम विंडो लिस्टिंग में उपयोग किया जाएगा, और आपको यह याद रखने में मदद करेगा कि आप प्रत्येक विंडो में क्या कर रहे हैं जब आप बहुत सारी विंडो का उपयोग करना शुरू करते हैं। "

बात तब है जब मैं नए स्क्रीन सेशन में हूं, मैं कंट्रोल + ए दबाने की कोशिश करता हूं और कुछ नहीं होता।


एक से एक का चयन करने के लिए एक तेजी से रास्ता सूची एकाधिक खुला स्क्रीन की, है screen -rके बाद एक नंबर 1, 2, 3 ... स्क्रीन की उस सूची में।
user18099

जवाबों:


91

यहां "लिस्टिंग" के दो स्तर हैं। सबसे पहले, आपके पास एक व्यक्तिगत सत्र के भीतर "विंडो लिस्टिंग" है, जो कि ctrl-A A के लिए है, और दूसरा "सत्र सूचीकरण" है जिसे आपने अपने प्रश्न में पेस्ट किया है और जिसे भी देखा जा सकता है screen -ls

आप -Sपैरामीटर के साथ सत्र के नामों को अनुकूलित कर सकते हैं , अन्यथा यह आपके hostname (teamviggy) का उपयोग करता है, उदाहरण के लिए:

$ screen

(ctrl-A d to detach)

$ screen -S myprogramrunningunderscreen

(ctrl-A d to detach)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

एक बोनस के रूप में, आप नाम के एक संक्षिप्त नाम का उपयोग कर सकते हैं जिसे आप -Sबाद में जोड़ने के लिए पास करते हैं :

screen -r myprog

(मैं myprogramrunningunderscreenसत्र से जुड़ गया हूं )


यह ctrl + aa आपके लिए काम करता है? मैं एक ही समय में नियंत्रण + दबाता हूं और फिर जल्दी से फिर से दबाता हूं और कुछ भी नहीं होता है।
जॉनमेरिनो

हाँ; वहाँ के बीच एक अंतर है ctrl-A aऔर ctrl-A shift-A। बाद वाले ने मुझे प्रेरित किया Set window's title to:। सुनिश्चित करें कि आप
पॉल

मैं करता हूं: "स्क्रीन -r 21tweet" और रिपीटीशन के रूप में मिलता है: "एक स्क्रीन पर है: 3239.21tweet (08/21/2015 09:14:35 पूर्वाह्न) (अटैच्ड) फिर से शुरू होने वाले मिलान के लिए कोई स्क्रीन नहीं है।" यह क्या हो सकता है?
माइकल

नामकरण स्क्रीन सत्रों के साथ एक बहुत स्पष्ट नहीं है कि यदि आप उनके साथ नाम रखते हैं -S, तो आपको स्क्रीन सत्र के पूर्ण नाम में आईडी नंबर और डॉट के बाद नाम के बहुत कम से कम एक संक्षिप्त नाम का उपयोग करना होगा, जब स्वचालित रूप से, फिर से शुरू करना उत्पन्न सत्र नाम, जहां आप आईडी और डॉट शामिल कर सकते हैं।
स्पेंसर विलियम्स

1
टाइपो, निश्चित। और यह साइट मुझे कुछ अतिरिक्त पाठ के बिना एक टिप्पणी पोस्ट करने नहीं देगी।
पॉल

37

मेरे पास एक ऐसा मामला था, जिसमें screen -rरिट्वीट करने में असफल रहा। -dझंडे को जोड़ना तो ऐसा लगा

screen -d -r

मेरे लिए काम किया। इसने पिछली स्क्रीन को अलग किया और मुझे रीटच करने की अनुमति दी। अधिक जानकारी के लिए मैन पेज देखें।


12

एक आसान तरीका बस के साथ एक मनमाना स्क्रीन को फिर से कनेक्ट करना है

screen -r

फिर एक बार जब आप स्क्रीन चला रहे होते हैं, तो आप सभी सक्रिय स्क्रीनों की एक सूची प्राप्त कर सकते हैं Ctrl-A "(यानी कंट्रोल-ए और उसके बाद एक दोहरे उद्धरण)। फिर आप बस एक समय में सक्रिय स्क्रीन का चयन कर सकते हैं और देख सकते हैं कि वे क्या चल रहे हैं। स्क्रीन का नामकरण, निश्चित रूप से, सही को पहचानना आसान बनाता है।

केवल मेरे दो सेंट्स


ओकी मैं अपनी स्क्रीन का नाम कैसे दूं?
आस्टिन

@ ऑस्टिन स्क्रीन -S <सत्रनाम>
ब्रायन

4

मुझे निम्नलिखित कॉम्बो का उपयोग करना है जहां मुझे कई समूहों में कई मशीनों पर काम करने की आवश्यकता है:

screen -S clusterX

यह नया स्क्रीन सत्र बनाता है जहां मैं पर्यावरण का निर्माण कर सकता हूं।

screen -dRR clusterX

यह वही है जो मैं बाद में उस स्क्रीन सत्र को पुन: लिखने के लिए उपयोग करता हूं। निफ्टी बिट्स यह है कि यदि सत्र कहीं और संलग्न है, तो यह उस अन्य डिस्प्ले को अलग करता है। इसके अलावा, अगर कुछ विचित्र कारण के लिए कोई सत्र नहीं है, जैसे कि किसी ने मेरे सर्वर को बिना मुझे जाने रिबूट कर दिया, तो यह एक बनाता है। आखिरकार। यदि कई सत्र मौजूद हैं, तो यह पहले वाले का उपयोग करता है।

इस टिप के लिए कुछ समय पहले https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions पर बहुत कुछ ।

संपादित करें:

इसके अलावा यहाँ कुछ उपयोगी व्याख्याएँ man screenक्रिप्टिक मापदंडों पर हैं

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

वहाँ -Dइतना है कि जाँच करना सुनिश्चित करेंman screen


2

के आउटपुट screen -listस्वरूपित है pid.tty.host। बच्चों के साथ पहली प्रक्रिया प्राप्त करने के लिए ग्रिड का उपयोग किया जा सकता है pstree:

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

आपको इस तरह की एक सूची मिलेगी

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...

1
screen -d -r 4964

या

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.