2016 के लिए संपादित करें:
यह Q & A systemd v230 पराजय से पहले का है । Systemd v230 के अनुसार, नया डिफ़ॉल्ट एक समाप्ति सत्र के सभी बच्चों को मारने के लिए है, इस बात की परवाह किए बिना कि ऐतिहासिक रूप से वैध सावधानी बरती गई थी। उपयोगकर्ता -केंद्र में डेमॉन शुरू करने के लिए सिस्टम-विशिष्ट तंत्र का उपयोग करके, या सेटिंग KillUserProcesses=no
को बदलकर व्यवहार को बदला जा सकता है /etc/systemd/logind.conf
। वे तंत्र इस प्रश्न के दायरे से बाहर हैं।
नीचे दिया गया पाठ बताता है कि लिनक्स की तुलना में अधिक समय तक यूनिक्स डिजाइन क्षेत्र में पारंपरिक रूप से किस तरह काम किया जाता है।
वे मारे जाएंगे, लेकिन जरूरी नहीं कि तुरंत। यह इस बात पर निर्भर करता है कि एसएसएच डेमन को यह तय करने में कितना समय लगता है कि आपका कनेक्शन मृत है। निम्नलिखित एक लंबी व्याख्या है जो आपको यह समझने में मदद करेगी कि यह वास्तव में कैसे काम करता है।
जब आप लॉग इन करते हैं, तो SSH डेमॉन ने आपके लिए एक छद्म टर्मिनल आवंटित किया है और इसे आपके उपयोगकर्ता के कॉन्फ़िगर लॉगिन शेल से जोड़ा है। इसे कंट्रोलिंग टर्मिनल कहा जाता है। प्रत्येक कार्यक्रम जो आप उस बिंदु पर सामान्य रूप से शुरू करते हैं, चाहे कितनी भी गहरी गोले की परतें हों, अंततः उस खोल पर अपने वंश का पता लगा लेंगे। आप इसे pstree
कमांड के साथ देख सकते हैं ।
जब आपके कनेक्शन से जुड़ी SSH डेमॉन प्रक्रिया यह तय करती है कि आपका कनेक्शन मृत है, तो यह SIGHUP
लॉगिन शेल में हैंगअप सिग्नल ( ) भेजता है । यह उस शेल को सूचित करता है जिसे आप गायब कर चुके हैं और इसे स्वयं के बाद साफ करना शुरू करना चाहिए। इस बिंदु पर जो होता है वह शेल विशिष्ट होता है ("HUP" के लिए इसके दस्तावेज़ीकरण पृष्ठ को खोजें), लेकिन अधिकांश भाग के लिए इसे SIGHUP
समाप्त करने से पहले इससे जुड़ी नौकरियों को भेजना शुरू हो जाएगा । उन प्रक्रियाओं में से प्रत्येक, बदले में, जो कुछ भी वे उस सिग्नल की प्राप्ति पर करने के लिए कॉन्फ़िगर किया गया है वह करेंगे। आमतौर पर इसका मतलब है कि समाप्त करना। यदि उन नौकरियों में स्वयं के रोजगार हैं, तो संकेत अक्सर साथ ही पास हो जाएगा।
नियंत्रण टर्मिनल के हैंगअप से बचने वाली प्रक्रियाएं ऐसी होती हैं जो या तो स्वयं को टर्मिनल होने से रोकती हैं (डेमन प्रक्रियाएं जो आपने इसके अंदर शुरू की थीं), या वे जो एक उपसर्ग nohup
कमांड के साथ लागू किए गए थे । (यानी "इस पर लटका नहीं") डेमॉन HUP सिग्नल की अलग तरह से व्याख्या करते हैं; चूंकि उनके पास एक नियंत्रित टर्मिनल नहीं है और स्वचालित रूप से एक एचयूपी सिग्नल प्राप्त नहीं करता है, इसलिए इसे कॉन्फ़िगरेशन को फिर से लोड करने के लिए व्यवस्थापक से मैन्युअल अनुरोध के रूप में पुनर्प्राप्त किया जाता है। विडंबना यह है कि अधिकांश प्रवेशकों ने गैर-डेमॉन के लिए इस सिग्नल के "हैंगअप" उपयोग को बहुत बाद तक नहीं सीखा है। इसलिए आप इसे पढ़ रहे हैं!
टर्मिनल मल्टीप्लेक्सर्स आपके शेल वातावरण को डिस्कनेक्ट के बीच बरकरार रखने का एक सामान्य तरीका है। वे आपको अपनी शेल प्रक्रियाओं से इस तरह से अलग करने की अनुमति देते हैं कि आप बाद में उन्हें फिर से धोखा दे सकते हैं, भले ही वह वियोग आकस्मिक या जानबूझकर हो। tmux
और screen
अधिक लोकप्रिय हैं; उनका उपयोग करने के लिए वाक्यविन्यास आपके प्रश्न के दायरे से बाहर है, लेकिन वे देखने लायक हैं।
यह निवेदन किया गया था कि मैं इस बात पर विस्तार से बताता हूं कि एसएसएच डेमन को यह तय करने में कितना समय लगता है कि आपका कनेक्शन मृत है। यह एक व्यवहार है जो एसएसएच डेमॉन के हर कार्यान्वयन के लिए विशिष्ट है, लेकिन जब टीसीपी कनेक्शन रीसेट करता है तो आप उन सभी को समाप्त कर सकते हैं। यह जल्दी से होगा यदि सर्वर सॉकेट और टीसीपी पैकेट को लिखने का प्रयास नहीं करता है, या धीरे-धीरे अगर पीटीवाई को लिखने का प्रयास नहीं किया जाता है।
इस विशेष संदर्भ में, कारकों में सबसे अधिक संभावना है कि वे ट्रिगर करें:
- एक प्रक्रिया (आमतौर पर अग्रभूमि में एक) सर्वर पक्ष पर PTY को लिखने का प्रयास करती है। (सर्वर> ग्राहक)
- उपयोगकर्ता क्लाइंट पक्ष पर PTY को लिखने का प्रयास कर रहा है। (ग्राहक> सर्वर)
- किसी भी प्रकार के रखवाले। ये आमतौर पर क्लाइंट या सर्वर द्वारा डिफ़ॉल्ट रूप से सक्षम नहीं होते हैं, और आमतौर पर दो फ्लेवर होते हैं: एप्लिकेशन स्तर और टीसीपी आधारित (यानी
SO_KEEPALIVE
)। रखवाले राशि या तो सर्वर या ग्राहक को दूसरी ओर पैकेट भेजते हैं, तब भी जब सॉकेट को लिखने का कोई कारण नहीं होगा। हालांकि यह आमतौर पर उस फायरवॉल्स को स्कर्ट करने का इरादा है, जो समय-समय पर कनेक्शन को जल्दी से समाप्त करता है, इसमें प्रेषक को नोटिस करने का कारण साइड इफेक्ट होता है जब दूसरा पक्ष अधिक तेज़ी से प्रतिक्रिया नहीं दे रहा है।
टीसीपी सत्र के लिए सामान्य नियम यहां लागू होते हैं: यदि क्लाइंट और सर्वर के बीच कनेक्टिविटी में रुकावट है, लेकिन समस्या के दौरान एक पैकेट भेजने के लिए न तो कोई प्रयास करता है, तो कनेक्शन बचेगा कि दोनों पक्ष बाद में उत्तरदायी हैं और अपेक्षित टीसीपी प्राप्त कर रहे हैं। अनुक्रम संख्या।
यदि एक पक्ष ने तय किया है कि सॉकेट मर चुका है, तो प्रभाव आम तौर पर तत्काल होते हैं: sshd प्रक्रिया भेजती है HUP
और स्व-समाप्ति (जैसा कि पहले वर्णित है), या ग्राहक का पता चला समस्या के उपयोगकर्ता को सूचित करेगा। यह ध्यान देने योग्य है कि सिर्फ इसलिए कि एक पक्ष को लगता है कि दूसरा मृत है इसका मतलब यह नहीं है कि दूसरे को इसकी सूचना दी गई है। कनेक्शन का अनाथ पक्ष आमतौर पर तब तक खुला रहेगा जब तक कि वह इसे लिखने और बार-बार बाहर निकालने का प्रयास नहीं करता है, या दूसरी तरफ से टीसीपी रीसेट प्राप्त करता है। (यदि कनेक्टिविटी उस समय उपलब्ध थी) तो इस उत्तर में वर्णित क्लीनअप केवल एक बार सर्वर द्वारा देखे जाने पर होता है।
screen
, तो पुनरावृत्ति का प्रयास करें ।