जब टर्मिनल करता है तो 'टर्मिनल' से चलने वाले कुछ प्रोग्राम 'और' बंद क्यों हो जाते हैं?


27

मैं सिर्फ सोच रहा था, उदाहरण के लिए जब मैं qtoxसाथ लॉन्च करता हूं :

qtox &

और फिर टर्मिनल qtoxबंद कर देता है, इसके साथ बंद हो जाता है। हालांकि जब etherapeउपयोग कर रहे हैं :

sudo etherape &

समापन टर्मिनल बंद नहीं करता है या एथरैप को कोई समस्या नहीं देता है। और अलग-अलग अनुप्रयोगों के बीच अलग-अलग व्यवहार होता है, कुछ जब टर्मिनल करता है, तो अन्य नहीं करते हैं, कैसे आते हैं? जब दूसरे नहीं करते तो कुछ करीबी क्यों? मैं गनोम 3.18 के साथ उबंटू GNOME 15.10 चला रहा हूं।


1
क्या ऐसा हो सकता है कि आप एक टर्मिनल खोलें, आप क्यूटॉक्स चलाते हैं, आप टर्मिनल बंद करते हैं, आप सभी !! लेकिन दूसरा आपको ओपन टर्मिनल जाता है, सूडो ईथरेट चलाता है, अब आप अपना टर्मिनल बंद कर देते हैं, लेकिन सूडो सुडो बंद होने तक चलता रहता है?
केन मोलेरुप

यदि आप qtoxटर्मिनल को बंद करते हैं तो आप बाहर निकलना नहीं चाहते हैं, तो आप इसे हमेशा चला सकते हैं nohup qtox &
टेरेंस

@ कथन: ठीक है, इस प्रश्न में मैं विशेष रूप से पूछ रहा था कि क्यों नहीं ... यह मेरा अन्य प्रश्न होगा ... :)

1
@PranoidPanda आह, अच्छी बात है। मेरी गलती। =)
टेरेंस

जवाबों:


36

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

प्रत्येक एकल प्रक्रिया सिग्नल पर कैसे प्रतिक्रिया करेगी, यह पूरी तरह से प्रक्रिया पर निर्भर करता है: यदि प्रक्रिया सिग्नल के लिए एक हैंडलर को परिभाषित नहीं करती है और कर्नेल को बताती है (कुछ syscall जैसे signal()या sigaction()) कि इसे संभालना चाहता है, तो कर्नेल निष्पादित होता है सिग्नल के लिए डिफ़ॉल्ट हैंडलर, जो SIGHUP सिग्नल के मामले में प्रक्रिया को समाप्त करने में शामिल है।

हालाँकि, जब आप एक कमांड चलाते हैं sudo, तो sudoप्रक्रिया का UID और इसकी चाइल्ड प्रोसेस 0(रूट) पर सेट हो जाता है ; सामान्य तौर पर, जब तक संकेत भेजने वाली प्रक्रिया का यूआईडी 0(रूट) या लक्ष्य प्रक्रिया के समान नहीं होता है, कर्नेल सिग्नल को खारिज कर देता है (यानी: एक प्रक्रिया किसी अन्य उपयोगकर्ता के स्वामित्व वाली प्रक्रिया को संकेत नहीं भेज सकती, जब तक कि प्रक्रिया नहीं हो। संकेत भेजना रूट के स्वामित्व में है); इसीलिए टर्मिनल द्वारा चलाए जा रहे बैश इंस्टेंस जैसे यूजर-रन की प्रक्रिया एक sudoप्रक्रिया को भी बंद नहीं कर सकती है और आखिरकार, टर्मिनल को बंद करने से शुरू होने वाली प्रक्रिया प्रभावित नहीं होती है sudo


7
और इसलिए हमें nohupउन कमांड्स के सामने की जरूरत है जो SIGHUP के साथ करीबी हैं :) Upgoated
Sergiy Kolodyazhnyy

9
मुझे लगता है कि कुछ भी जादू नहीं है sudosudoबस एक अन्य उपयोगकर्ता के रूप में कमांड चलाता है और आप अन्य उपयोगकर्ताओं की प्रक्रियाओं को संकेत नहीं भेज सकते हैं। देख लो man 2 kill
el.pescado

@ el.pescado तो sudoकिसी तरह का गरीब आदमी है nohup?
हेगन वॉन एटिजन

7
@HagenvonEitzen यदि आप चाहते हैं, लेकिन मैं अत्यधिक एक आदेश की आवश्यकता नहीं है कि चल रहा से बचना चाहते हैं sudoके साथ sudoअपने लिए nohupपक्ष प्रभाव है, अन्य सभी कमियां माना जाता है।
कोस

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