मैं एक खोई हुई स्क्रीन (अलग, गुम सॉकेट) को फिर से कैसे जोड़ूँ?


23

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

$ screen -D -R
[new screen]

है ना? नहीं, नया सत्र नहीं, पुराने को छोड़ दो। मुझे पता है, मैं इसे सीधे हड़प लूंगा। सॉकेट नाम क्या है?

$ screen -list
No Sockets found in /var/run/screen/S-username

$ ls -a /var/run/screen/S-username
.  ..

रुको क्या? मुझे पता है कि मैंने इसे चलाना छोड़ दिया। कहाँ जाना होगा?

$ ps -ef | grep -i screen
username  30860     1  0 Oct16 ?        00:00:29 SCREEN

खैर, प्रक्रिया है। लेकिन पास करने के लिए कोई सॉकेट नहीं है screen -r। मैं अपने सत्र को कैसे रिलेट कर सकता हूं?

जवाबों:


28

Screenजब भी यह SIGCHLDसिग्नल प्राप्त करता है, तो पियो / सॉकेट की जाँच करता है । यदि सॉकेट गायब है, तो इसे फिर से बनाया जाएगा। तो समाधान प्रक्रिया को खोजने और भेजने के लिए है SIGCHLD

मेरे डेबियन सिस्टम पर, screenसेटगिड के रूप में स्थापित किया गया प्रतीत होता है, utmpलेकिन सेट्यूड नहीं, इसलिए नीचे दिए गए FAQ से पहला समाधान:

$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost

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

एक संग्रहीत गेंटू विकी FAQ से :

सॉकेट मिसिंग

कभी-कभी अभी भी चल रहे स्क्रीन के सॉकेट को नष्ट किया जा सकता है, हालांकि वास्तविक प्रक्रिया और इसकी सभी बाल प्रक्रियाएं अभी भी चल रही हैं। स्क्रीन-लिस्ट " http://www4.informatik.uni-erlangen.de/ पर इससे पुनर्प्राप्त करने के लिए कुछ आसान निर्देश (और कुछ अन्य असामान्य समस्याओं) से निपटने के लिए कुछ आसान निर्देश प्रदर्शित करेगा।" ~ jnweiger / screen-faq.html # MISC नीचे के रास्ते का लगभग 2/3 भाग।

प्रश्न: किसी अज्ञात कारण से, /o / tmp / स्क्रीन / S-myname में फेनो चला गया है, और मैं अपना स्क्रीन सत्र फिर से शुरू नहीं कर सकता। क्या पंद्रह को फिर से बनाने का एक तरीका है?

A: स्क्रीन जब भी कोई SIGCHLD सिग्नल प्राप्त करता है, तो वह पांचो / सॉकेट की जांच करता है। यदि गुम हो जाए, तो फ़ोरो / सॉकेट को फिर से बनाया जाता है।

यदि स्क्रीन नॉन सेट-यूड चल रही है तो उपयोगकर्ता kill -CHLD screenpidसीधे (यह -CHILDकुछ सिस्टम पर है) जारी कर सकता है । स्क्रीनपीड एक ps -xलिस्टिंग में पाया गया स्क्रीन प्रक्रिया की प्रक्रिया-आईडी है ।

लेकिन आमतौर पर यह काम नहीं करेगा, क्योंकि स्क्रीन को सेतुइड रूट स्थापित किया जाना चाहिए। इस मामले में आप इसे सिग्नल नहीं भेज पाएंगे, लेकिन कर्नेल होगा। ऐसा तब होता है, जब भी स्क्रीन का कोई बच्चा अपनी स्थिति बदलता है। स्क्रीन के अंदर चलने वाले "कम से कम महत्वपूर्ण" शेल की प्रक्रिया-आईडी (नीचे शेलपिड) का पता लगाएं। कोशिश करो kill -STOP shellpid। यदि पंद्रह / सॉकेट फिर से प्रकट नहीं होता है, तो शेल प्रक्रिया को नष्ट करें। बाकी को बचाने के लिए आप एक खोल को पवित्र करते हैं। यदि कुछ भी काम नहीं करता है, तो कृपया खोए हुए स्क्रीन सत्र में चल रही सभी प्रक्रियाओं को हटाने के लिए मत भूलना।

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