प्रत्येक प्रक्रिया में कई विशेषताएं होती हैं जो प्रक्रिया व्यक्तिगत रूप से और स्वतंत्र रूप से अन्य प्रक्रियाओं से निर्धारित कर सकती है। उदाहरण संसाधन सीमा, उमस्क, वर्तमान निर्देशिका, पर्यावरण चर और कुछ और हैं। प्रक्रिया के निर्माण पर ( fork()
सिस्टम कॉल के माध्यम से) बच्चा माता-पिता से इन विशेषताओं को प्राप्त करता है। इसके बाद बच्चे की प्रक्रिया इन विशेषताओं को मनमाने ढंग से निर्धारित कर सकती है। (कुछ प्रतिबंध लागू होते हैं, एक प्रक्रिया हार्ड संसाधन सीमा को बढ़ा नहीं सकती है या इसकी वर्तमान निर्देशिका को एक निर्देशिका में बदल सकती है जिसके लिए इसकी कोई अनुमति नहीं है।)
केवल कुछ प्रोग्राम अपने पर्यावरण चर को संशोधित करते हैं, सबसे ज्यादा परेशान नहीं करते हैं। मान लीजिए बाद वाला मामला। इसलिए यदि एक बच्चे की प्रक्रिया खुद को आगे के बच्चे बनाती है, तो इन प्रक्रियाओं में दादा-दादी के समान पर्यावरण चर होंगे। और इसी तरह।
अब, एक शेल में बहुत सारे वैरिएबल होते हैं जिन्हें set
(बॉर्न शेल प्रकार के गोले में, सी शेल के बारे में पता नहीं) के साथ देखा जा सकता है । ये चर पर्यावरणीय चर नहीं हैं जब तक कि वे export
एड न हों। पर्यावरण चर के साथ देखा जा सकता है env
। यदि आप शेल कमांड लाइन से एक प्रोग्राम लॉन्च करते हैं, तो प्रोग्राम शेल से पर्यावरण चर का वारिस करेगा। इसी तरह शेल स्क्रिप्ट से लॉन्च किए गए प्रोग्राम के लिए।
इसलिए, लॉगिन करने पर एक शेल होता है जो प्रोफ़ाइल डेटा (जैसे ~/.profile
) पढ़ता है और उन्हें लगभग सभी बच्चों, पोते और इतने पर विरासत में मिला है। यह कैसे पर्यावरण चर सेटिंग्स लॉगिन शेल या लॉगिन स्क्रिप्ट से लॉगिन सत्र के भीतर लॉन्च किए गए अन्य सभी कार्यक्रमों के लिए नीचे जाती है।
मैंने एक टर्मिनल विंडो में एक पर्यावरण चर बनाया और इसे दूसरे टर्मिनल विंडो में प्रतिध्वनित करने की कोशिश की। वह कुछ भी नहीं दिखा।
उपरोक्त स्पष्टीकरण से, यह अपेक्षित परिणाम है। एक प्रक्रिया के वातावरण में परिवर्तन इस प्रक्रिया के केवल बच्चों को प्रभावित करता है जो कि पहले से निर्मित हैं, न कि मौजूदा वाले।
$TEST=hello
यह वैसे भी काम करने की संभावना नहीं है, जब तक कि चर विस्तार अक्षम न $TEST
हो या पहले से ही एक उपयुक्त मूल्य न हो। यदि आप hello
चर को निर्दिष्ट करना चाहते हैं TEST
तो आपको कहना होगा TEST=hello
(नोट: नहीं $
)।
उसके बाद मैंने इसे निर्यात किया और echo
एक अलग टर्मिनल विंडो में फिर से कोशिश की । परिणाम पहले जैसा ही था।
एक बार फिर, यह अपेक्षित परिणाम है।
लेकिन अगर मैं लॉगिन पर एक ही कोड निष्पादित करता हूं (कोड को ~/.profile
फाइल करने के लिए जोड़कर ) चर किसी भी टर्मिनल विंडो का उपयोग किया जा सकता है।
ऐसा इसलिए है क्योंकि टर्मिनल में शेल शेल का वंशज है जो पर्यावरण सेटिंग्स को पढ़ता है ~/.profile
और इस प्रकार इन सेटिंग्स को विरासत में मिला है।