जब कोई प्रोग्राम टर्मिनल द्वारा शुरू नहीं किया जाता है तो IO और अन्य शेल कमांड


5

मेरे पास विभिन्न कार्यक्रमों के लिए मेरे डेस्कटॉप पर कई लांचर हैं, और उन लॉन्चरों के लिए एक "रन इन ए टर्मिनल" सेटिंग है।

जब मैं उस सेटिंग की जांच करता हूं, तो प्रोग्राम एक टर्मिनल से चलता है, और वहां इसका आउटपुट लॉग करता है। मुझे लगता है कि यह stdinटर्मिनल से भी पढ़ सकता है।

हालांकि: जब एक टर्मिनल द्वारा कार्यक्रम नहीं चलाया जाता है तो IO का क्या होता है? इसके अलावा, जब मैं किसी प्रोग्राम से सिस्टम (शेल) कमांड निष्पादित करता हूं तो क्या होता है?

क्या कोई "पृष्ठभूमि" शेल है जो उन कार्यक्रमों को चलाता है? या क्या प्रत्येक प्रोग्राम को अपना शेल मिलता है जिसके माध्यम से यह बाकी सिस्टम के साथ इंटरफेस करता है?


मेरा मानना ​​है कि प्रत्येक आउटपुट स्ट्रीम (STDOUT, STDERR) में जाने के लिए एक डिफ़ॉल्ट स्थान है यदि इसे उपयोगकर्ता द्वारा मैन्युअल रूप से पुनर्निर्देशित नहीं किया गया है। मुझे लगता है कि अगर आउटपुट उत्पन्न हो रहा था, लेकिन उपयोगकर्ता टर्मिनल इसे पकड़ने के लिए मौजूद नहीं था, तो इसे पुनर्निर्देशित किया जाएगा /dev/null। मुझसे गलती भी हो सकती है।
n0pe

जवाबों:


2

जब कोई प्रोग्राम लॉन्च किया जाता है ( exec(3)सिस्टम कॉल के परिवार में से एक ), तो यह वातावरण (यानी, शेल वेरिएबल exportएड) और पैरेंट से खुली फाइलों को विरासत में मिलता है । जब प्रोग्राम लॉन्च किया जाता है तो क्या किया जाता है fork(2), बच्चा पर्यावरण और फाइलों को सेट करता है, फिर exec(3)नया प्रोग्राम शुरू करता है। जब कोई शेल ऐसा करता है, तो STDIN, STDOUT और STDERR टर्मिनल से जुड़े होते हैं। कोई भी ग्राफिक लॉन्चर जो करता है, वह उसके ऊपर है, लेकिन क्या उन्हें /dev/null(जहां इनपुट इनपुट से आना चाहिए, और जहां आउटपुट जाना है?) से कनेक्ट करना चाहिए ।

यदि कोई प्रोग्राम उस तरह से चालू होता है exec(3), तो यह ऊपर बताए अनुसार है। system(3)थोड़ा अधिक जटिल है, क्योंकि यह कमांड लाइन पार्सिंग वगैरह करने के लिए शेल खोलता है, और वह शेल तब exec(3)कमांड को एस करता है। लेकिन यांत्रिकी एक ही है: फाइलें विरासत में मिली हैं, जैसा कि पर्यावरण है।

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