जब आप लॉग आउट करते हैं तो किन मामलों में SIGHUP को नौकरी पर नहीं भेजा जाता है?


10

मैंने उस उपयोगकर्ता का उत्तर पढ़ा जिसने दावा किया था कि वह चल रहा है

foo 2>&1 >& output.log &

परिणाम fooतब भी जारी रहेगा जब वे लॉग आउट करेंगे। इस उपयोगकर्ता के अनुसार, इसने SSH कनेक्शन पर भी काम किया।

मैं वास्तव में विश्वास नहीं करता था, जैसा कि मैं इस धारणा के तहत था कि एसएसएच से डिस्कनेक्ट करने या टीटीवाई को समाप्त करने के मामले में, शेल और इसलिए इसकी प्रक्रियाओं को एक साइट प्राप्त होगी, जिससे उन्हें समाप्त कर दिया जाएगा। यह, मेरी धारणा के तहत, nohupऐसे मामलों में उपयोग करने का एकमात्र कारण था , या tmux, screenएट अल।

मैं तो glibc के मैनुअल में देखा :

इस संकेत का उपयोग उस सत्र से जुड़ी नौकरियों के लिए एक टर्मिनल पर नियंत्रण प्रक्रिया की समाप्ति की रिपोर्ट करने के लिए भी किया जाता है; यह समाप्ति नियंत्रण टर्मिनल से सत्र की सभी प्रक्रियाओं को प्रभावी ढंग से काटती है।

यह मेरे विचारों की पुष्टि करता है। लेकिन आगे देखते हुए, यह कहते हैं :

यदि प्रक्रिया एक सत्र नेता है जिसमें एक नियंत्रण टर्मिनल है, तो अग्रभूमि नौकरी में प्रत्येक प्रक्रिया के लिए एक SITEUP संकेत भेजा जाता है, और नियंत्रण टर्मिनल उस सत्र से अलग हो जाता है।

तो, क्या इसका मतलब यह है कि बैकग्राउंड में काम करने वाले जॉब्स को SITEUP नहीं मिलेगा?

अपनी आगे की उलझन के लिए, मैंने एक इंटरैक्टिव Zsh सत्र चलाया, भाग गया yes >& /dev/null &, और टाइप किया exit, जब Zsh ने मुझे चेतावनी दी कि मैं नौकरी चला रहा हूं, और exitदूसरी बार टाइप करने के बाद , मुझे बताया कि इसने एक ही काम किया था। बैश में ठीक वैसा ही करने से काम चल जाता है…


मुझे अतीत में एक सर्वर के साथ समस्या थी जो अचानक ssh पर डिस्कनेक्ट हो जाती है, और मेरी प्रक्रिया बस चलती रही लेकिन बिना किसी tty से जुड़े, इसलिए मुझे फिर से लॉगिन करना पड़ा और उन्हें समाप्त करने के लिए SIGHUP / TERM / KILL भेजना पड़ा। इसलिए, उसी तर्क का अनुसरण करते हुए, मैंने अभी-अभी परीक्षण किया है, टाइप किया है logoutऔर yesअभी भी चल रहा है।
ब्रिअम जूल

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

क्या आप इस प्रश्न का उल्लेख कर रहे हैं: serverfault.com/questions/115999/… ? जवाब वहाँ लगता है - यह RedHat डिफ़ॉल्ट रूप से दुकान की स्थापना नहीं है। यह रेडहैट का विशेष कॉन्फ़िगरेशन क्वर्क है।
बोरिस बुर्कोव

@ याकूब नहीं, मैंने इसे पहले नहीं देखा है, लेकिन यह एक अच्छा संसाधन है। धन्यवाद!
23

खुशी है कि यह मदद की। दरअसल राफेल उस मुद्दे का भी जिक्र कर रहे हैं।
बोरिस बुर्कोव

जवाबों:


18

बैश SIGHUPकेवल भेजने के लिए लगता है यदि यह स्वयं प्राप्त करता है SIGHUP, जो उदाहरण के लिए होता है जब एक वर्चुअल टर्मिनल बंद होता है या जब एसएसएच कनेक्शन बाधित होता है। से प्रलेखन :

किसी S नाइट की प्राप्ति पर शेल डिफ़ॉल्ट रूप से बाहर निकलता है। बाहर निकलने से पहले, एक इंटरेक्टिव शेल सभी जॉब के लिए, रनिंग या रोके जाने के लिए SITEUP का समाधान करता है। बंद नौकरियों को SIGCONT भेजा जाता है ताकि यह सुनिश्चित हो सके कि वे SIGHUP प्राप्त करते हैं। शेल को किसी विशेष कार्य के लिए SITEUP सिग्नल भेजने से रोकने के लिए, उसे जॉब टेबल से हटाए गए बिलिन (जॉब कंट्रोल बिल्डिंस देखें) के साथ हटा दिया जाना चाहिए या डिस -एच का उपयोग करके SIGHUP प्राप्त नहीं करने के लिए चिह्नित किया जाना चाहिए।

इसलिए यदि आप टाइप करते हैं exitया प्रेस करते हैं तो Ctrl+ Dसभी पृष्ठभूमि प्रक्रिया बनी रहेगी, क्योंकि यह बैश करने के लिए हैंग सिग्नल नहीं भेजता है।

आप बैश को इस तथ्य के बारे में चेतावनी देने के लिए मजबूर कर सकते हैं कि अभी भी पृष्ठभूमि की प्रक्रियाएं चल रही हैं

shopt -s checkjobs

SIGHUPयदि आप एक इंटरैक्टिव शेल में हैं (तो यहां देखें ) बाहर निकलने का विकल्प है । लेकिन यह बैश 4.2.25 के साथ मेरी मशीन पर काम नहीं करता है। शायद यह आपके लिए काम करे

shopt -s huponexit

तो, जब एक एसएसएच कनेक्शन बाधित होता है, SIGHUPतो भेजा जाता है, अन्यथा, एक साफ निकास के साथ, नौकरियां चलती रहती हैं? जो मैंने देखा, वह बताता है।
14

हाँ। हैंग सिग्नल केवल विशेष मामले के लिए है, जब उपयोगकर्ता के साथ कनेक्शन बाधित होता है।
राफेल अहरेंस



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