GNU स्क्रीन - खो कनेक्शन के बाद स्क्रीन पर रीटच करने में असमर्थ


23

मैं स्क्रीन में irssi का उपयोग कर रहा था लेकिन कनेक्शन खो गया। सर्वर पर वापस आने के बाद, मैं अब उस स्क्रीन से नहीं जुड़ सकता। स्क्रीन-पर्ल दिखाता है कि स्क्रीन पहले से ही जुड़ी हुई है।

मैंने स्क्रीन -D को जबरदस्ती अलग करने की कोशिश की , और उसने कहा कि अलग है, लेकिन स्क्रीन-हील्स अभी भी कहते हैं कि यह संलग्न है। मैंने स्क्रीन-एक्स की कोशिश की और यह बस वहीं लटक गया।

[sub@server ~]$ screen -ls 
There are screens on:
 4033.poe (Detached)
 7728.irssi (Attached)
2 Sockets in /var/run/screen/S-sub.

अब मैं क्या कर सकता हूँ?

जवाबों:


14

यदि आप 'अटैच्ड' स्क्रीन को कनेक्ट करने का प्रयास कर रहे हैं, तो चलाएं screen -xr irssi। अपरकेस '-X' स्क्रीन सत्रों में से एक को एक कमांड भेजता है, निचला '-x' विकल्प आपको एक संलग्न सत्र को फिर से कनेक्ट करने की अनुमति देता है। लेकिन आपको अभी भी सत्र का नाम देने की आवश्यकता है क्योंकि एक से अधिक है।


9

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


2
यहां वर्णित सभी विकल्पों (-RD, -xr) की कोशिश की और सत्र को पुनर्प्राप्त नहीं कर सका। यह (ps -ef | grep bash) खोजकर SCREEN सत्र को समाप्त करना।
so_mv

4

आपने इसे एक गैर-डिफ़ॉल्ट नाम दिया है। इसे इस्तेमाल करे:screen -RD irssi


2
मैं एक समान मुद्दा है, लेकिन स्क्रीन -RD <name> अभी भी लटका हुआ है ... :-(
harald

4

तुम कोशिश कर सकते हो:

#Reattach a session and if necessary detach it first.
screen -d -r 7728.irssi  

#Reattach a session. If necessary detach and logout remotely first.
screen -D -r 7728.irssi

यह हमेशा एक अच्छा विचार है पूर्ण नाम का उपयोग करें pid.tty


3

screenसंस्करणों के बीच पीछे-संगत नहीं होने के लिए जाना जाता है। यदि screenसर्वर के संस्करण को अपडेट किया गया था, तो यह संभव हो सकता है कि आप पुराने स्क्रीन सत्रों को फिर से रीटेट नहीं कर सकते।

उस स्थिति में, आप पुराने SCREEN बाइनरी का उपयोग रीटैच करने के लिए कर सकते हैं (बशर्ते आपके वितरण पैकेज प्रबंधक ने इसे कहीं सहेज दिया हो), या सत्र को पूरी तरह से मार दें।


2

मुझे GNU / स्क्रीन प्रक्रिया को एक SIGCHLD (जो आमतौर पर एक विंडो बंद होने पर प्राप्त होता है) भेजकर कुछ सफलता मिली है, यह सॉकेट फ़ाइल को छूने (और संभवतः पुन: बनाने) के लिए मजबूर करता है।

यह भी ध्यान दें कि screenनिष्पादन योग्य को लागू करने के दो तरीके हैं जो केवल मामले में भिन्न हैं: SCREENसर्वर-साइड घटक जिसे आप फिर से कनेक्ट करने का प्रयास कर रहे हैं, जबकि screenक्लाइंट-साइड है जो आपके टर्मिनल और सर्वर-साइड के बीच डेटा को फेरबदल करता है। तो आप लो-केस वर्जन को मारने की कोशिश कर सकते हैं ...

उदाहरण के लिए निम्नलिखित में आप देख सकते हैं कि मेरे screenऔर SCREENप्रक्रियाओं को माता-पिता और बच्चे नहीं माना जाता है, यह दर्शाता है कि मैंने मौजूदा सत्र से जुड़ा हुआ है।

# ps fao pid,command
25070 SCREEN -U
25071  \_ vim +let &t_Co=256
25073  \_ -bash
25077  \_ -bash
...
18364  \_ sshd: username [priv]
18366  |   \_ sshd: username@pts/17
18367  |       \_ -bash
  870  |           \_ screen -U -x

नए सत्र इस तरह दिखते हैं:

19645  |  \_ screen -S MySession
19646  |      \_ SCREEN -S MySession
19647  |          \_ bash
 1485  |          |   \_ python
19700  |          \_ bash

SIGCHILD कैसे भेजें?
जियोर्जियो79

1
स्कोली नामित killकमांड का उपयोग करें जैसे: kill -s SIGCHLD <PID>जहां <PID>प्रोसेस आईडी नंबर (मेरे उदाहरण आउटपुट में बाएं-सबसे कॉलम)
रोबम

1

यह मेरे साथ तब हुआ जब मैं vi का उपयोग कर रहा था जहां सत्र में देरी हुई और मैंने डिस्कनेक्ट कर दिया। जब स्क्रीन-आरएक्स का उपयोग करके स्क्रीन को रीटच करने का प्रयास किया जाता है, तो प्रक्रिया बस लटक जाएगी।

एक समान बाल प्रक्रिया हो सकती है जिससे स्क्रीन हैंग हो सकती है। यदि आप उस पर विशेष रूप से ध्यान केंद्रित करते हैं, तो अन्यथा आपकी स्क्रीन के नीचे चल रही बाल प्रक्रिया की सूची प्राप्त करने के लिए:

ps ux -H

जो नेस्टेड चाइल्ड प्रोसेस दिखाएगा:

zwood    28481  0.0  0.0 101148  8844 ?        Ss   Oct07   1:36 SCREEN -S mysession
zwood    28482  0.0  0.0  67436  1744 pts/2    Ss+  Oct07   0:00   /bin/bash
zwood    28515  0.0  0.0  67556  1876 pts/4    Ss+  Oct07   0:00   /bin/bash
zwood     4498  0.0  0.0  67436  1772 pts/5    Ss   Oct07   0:00   /bin/bash
zwood     2007  0.0  0.0  73604  1324 pts/5    S+   15:47   0:00     vi /home/zwood/.bashrc.custom
zwood    14670  0.0  0.0  67436  1768 pts/13   Ss+  Oct14   0:00   /bin/bash
zwood    27002  0.0  0.0  67436  1720 pts/11   Ss+  Oct20   0:00   /bin/bash
zwood    24748  0.0  0.0  67432  1712 pts/14   Ss+  Oct21   0:00   /bin/bash

पहली बार समस्या पैदा करने वाली vi प्रक्रिया को मारने के बाद, मैं बिना किसी समस्या के स्क्रीन को रीटच करने में सक्षम था। किसी भी पिछली प्रक्रियाओं को मारना जो स्क्रीन पर रीटेट किया गया था शायद एक अच्छा विचार है। महज प्रयोग करें:

kill -9 <pid>

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


स्क्रीन के नीचे प्रक्रियाओं का एक मार होड़ ही एकमात्र चीज थी जिसने मुझे भी बचाया। मैं बल्कि स्क्रीन के नीचे कई प्रक्रियाओं को खो सकता हूं, पूरे स्क्रीन सत्र को खोने की तुलना में!
योनातन


0
killall -9 sshd

इसने मेरे लिए काम किया। मेरे पास 3 अलग-अलग स्क्रीन थे, और मैंने 3 अलग-अलग ssh कनेक्शन खो दिए हैं। फिर से जोड़ने के बाद, स्क्रीन अभी भी जुड़ी हुई थीं, मैंने ऊपर आदेश जारी किया ... बेशक मैंने अपना वर्तमान कनेक्शन खो दिया है, लेकिन यह एक नया था। अगले पुन: कनेक्ट होने पर, प्रत्येक स्क्रीन को अलग कर दिया गया था।

ध्यान दें, यदि आप एक सुपरयुसर हैं तो आपको --userकेवल अपने ssh डेमोंस को मारने के लिए विकल्प का उपयोग करना चाहिए ।

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