तथ्य यह है कि एक प्रक्रिया "विघटित" है केवल इंटरैक्टिव शेल के लिए एक अर्थ है जिसने इस प्रक्रिया को बनाया है। इसका अर्थ यह है कि शेल अपने कार्य तालिका में प्रक्रिया को शामिल नहीं करता है (और) जब शेल बाहर निकलता है तो इस प्रक्रिया को इस प्रक्रिया में नहीं भेजा जाएगा। यह वास्तव में आपके सवालों से संबंधित नहीं है।
हटाए गए वर्चुअल टर्मिनल पर भेजे जाने वाले आउटपुट के बारे में क्या होता है: मैंने खुद कुछ परीक्षण किए, और मैंने देखा कि /dev/pts/x
डिवाइस पहुंच योग्य नहीं हैं, और तब तक फिर से आवंटित नहीं किया जाएगा जब तक कि सभी फ़ाइलेस्क्रिप्ट्स उन्हें बंद नहीं कर देते। इसलिए, मैं एक कारण नहीं देख सकता कि हटाए गए टर्मिनल को क्यों लिखा जाता है। मुझे लगता है कि यह POSIX द्वारा परिभाषित नहीं है।
टर्मिनल को लिखने वाली कुछ प्रक्रिया के आउटपुट को हथियाने के बारे में, मुझे नहीं लगता कि यह तब भी संभव है, जब टर्मिनल अभी भी ज़िंदा है। आप बस टर्मिनल के लिए सीधे इनपुट को पकड़ सकते हैं (यानी कीस्ट्रोक्स, या सिम्युलेटेड कीस्ट्रोक्स को एक पाइट के मास्टर भाग द्वारा)। यदि प्रक्रियाएँ स्टडिन पर पढ़ी जाएँगी कि उनके टर्मिनलों को क्या लिखा गया है, तो अधिकांश प्रक्रिया के लिए एक स्वयं io लूप होगा।
प्रक्रिया समाप्ति पर अंतिम टिप्पणी के बारे में, मैं वास्तव में नहीं जानता कि क्या हो रहा है, लेकिन मुझे संकेतों (SIGTTOU, SIGTTIN, SIGHUP, या अन्य) के साथ अजीब व्यवहार पर संदेह होगा जो प्रक्रिया समूहों के अग्रभूमि / पृष्ठभूमि की स्थिति से संबंधित है, जब सत्र नेता बाहर निकलता है (उदाहरण के लिए su
, आपके द्वारा बताए गए मामले में)।
संपादित करें का जवाब : नहीं, आउटपुट के संबंध में, जब एक प्रक्रिया को अस्वीकार कर दिया जाता है तो कुछ भी नहीं बदलता है: यह अभी भी इसके नियंत्रण टर्मिनल से जुड़ा हुआ है (जब तक कि यह पहले से ही अलग नहीं हो जाता है जैसे डेमॉन करते हैं)। आप इसका उपयोग करके देख सकते हैं ps
। हालाँकि, आप इस प्रक्रिया के लिए शेल द्वारा प्रदान किए गए fg
/ bg
/ jobs
आदेशों का उपयोग नहीं कर पाएंगे । इसका मतलब है कि टर्मिनल से इनपुट के साथ इसे फीड करना मुश्किल हो सकता है (अग्रभूमि प्रक्रिया समूह में होना आवश्यक है)।
-
1. जब तक कि प्रक्रिया कुछ डिबगिंग टूल्स के साथ तैयार या अपहृत न हो, (ऊपर टिप्पणियां देखें)।