এটি বুঝতে গুরুত্বপূর্ণ যে প্রতিটি প্রক্রিয়াতে পরিবেশের ভেরিয়েবলগুলির নিজস্ব সেট রয়েছে।
যখন কোনও প্রক্রিয়া fork()
সিস্টেম কলকে কল করে, প্রথম ( পিতামাতার ) অনুরূপ একটি দ্বিতীয় প্রক্রিয়া ( শিশু ) তৈরি করা হয় (এই অনুলিপিতে পরিবেশ অন্তর্ভুক্ত রয়েছে, যা স্ট্যাকের ঠিক উপরে নির্ভর করে (বা ঠিক নীচে, আপনি কীভাবে স্ট্যাকের কথা ভাবেন - তবে ইউনিক্স / লিনাক্সে স্ট্যাকটি উচ্চ ঠিকানা থেকে নীচে নেমে আসে)।:-)
সাধারণত, শিশু প্রক্রিয়া তারপরে execve()
সিস্টেম কল কল করবে, যা এর (ভার্চুয়াল) মেমরির সমস্ত কিছু ফেলে দেবে এবং পুনর্গঠন করবে এবং নির্দিষ্ট বাইনারি ফাইলের কোড এবং ডেটা বিভাগগুলি থেকে এটি করবে।
যাইহোক, যখন এটি reconstructs স্ট্যাক, এটা কপি পরিবেশ ও যুক্তি স্ট্রিং পাস execve()
স্ট্যাকের সম্মুখের প্রথম (যাতে), কল করার আগে main()
ফাংশন (কাজ অনেক মধ্যে সম্পন্ন করা হয় crt0
পরে বুটস্ট্র্যাপ কোড execve()
(রিটার্ন এন্ট্রি বিন্দু বাইনারি নির্দিষ্ট ))।
execve()
সি লাইব্রেরিতে সিস্টেম কলের জন্য মোড়ক রয়েছে যা বর্তমান পরিবেশটি (যেমন পিতামাতার পরিবেশনের একটি অনুলিপি) পাস করবে, কলারের পরিবর্তে এটি সরবরাহ করবে (সুতরাং বাস্তবে শিশু পিতামাতার পরিবেশের উত্তরাধিকারী হবে ) - দেখুন environ(7)
।
কমান্ড চালানোর চেষ্টা করুন (রুট হিসাবে) ps axeww | less
... এটি আপনাকে সমস্ত প্রক্রিয়াটির পরিবেশ দেখায় ! মজার একটি হ'ল প্রসেস আইডি 1 (যেমন init
প্রক্রিয়া - বুট সময়ে কার্নেল দ্বারা নির্মিত প্রথম প্রক্রিয়া)।
যদি আপনি কোনও নির্দিষ্ট প্রক্রিয়ার জন্য পরিবেশটি দেখতে চান (এবং আপনি এটির প্রক্রিয়া আইডিটি জানেন), কমান্ডটি চালানোর চেষ্টা করুন cat /proc/<PID>/environ
( <PID>
প্রক্রিয়া আইডির পরিবর্তে )।
মনে রাখবেন যে কোনও প্রক্রিয়াতে পর্যাপ্ত সুযোগ-সুবিধাগুলি থাকলে এটি তার নিজস্ব স্ট্যাকটি পুনরায় লিখতে পারে, যা এর পরিবেশটি কী তা জানতে অসুবিধা করতে পারে - আপনি পিএস আউটপুটে এই জাতীয় কিছু ডিমন প্রক্রিয়া দেখতে পাবেন।
তবে শেষ অবধি, এই সমস্ত ভ্যাফলটি উপরে উঠেছিল @ শ্যাওসগুলি উপরে কি বলেছে, আপনি যদি নিজের শেল প্রক্রিয়াতে একটি নির্দিষ্ট পরিবেশের পরিবর্তনশীলের বর্তমান মানটি দেখতে চান তবে কেবল (বিল্টিন) কমান্ডটি ব্যবহার করুন ( এর নামের সাথে echo "$<NAME>"
প্রতিস্থাপন করে ) <NAME>
এনভায়রনমেন্ট ভেরিয়েবল আপনার আগ্রহী) ... কেবলমাত্র সচেতন থাকুন যে একই ভেরিয়েবলের অন্য কোনও প্রক্রিয়াতে আলাদা মান থাকতে পারে বা অস্তিত্ব থাকতে পারে না।
echo
একটি কমান্ডের দুর্বল পছন্দ কারণ এটি ভেরিয়েবলের বিষয়বস্তুকে রূপান্তরিত করতে পারে। এটি শেল প্যারামিটারের সামগ্রীটি একই নামে আউটপুট করবে। উদাহরণস্বরূপ1
, বোর্ন শেল ব্যবহার করা বা এনভির ওয়ার্সের মতো ব্যবহার করা একই নয়*
। এবং আপনি এনভির ভার্সের জন্য সেই পদ্ধতির ব্যবহার করতে পারবেন না যার নামটি শেল ভেরিয়েবলের নাম হিসাবে বৈধ নয়।