সুতরাং, আমি ভেবেছিলাম আমার এ সম্পর্কে ভাল ধারণা আছে তবে কেবল একটি পরীক্ষা চালিয়েছি (এমন কথোপকথনের প্রতিক্রিয়াতে যেখানে আমি কারও সাথে একমত নই) এবং দেখলাম যে আমার বোঝা ত্রুটিযুক্ত ...
যতটা সম্ভব বিশদে আমি যখন আমার শেলটিতে একটি ফাইল কার্যকর করি তখন ঠিক কী ঘটে? আমার অর্থ হ'ল, যদি আমি টাইপ করি: ./somefile some argumentsআমার শেলটিতে এবং টিপুন রিটার্নে (এবং somefileসিডব্লিউডে উপস্থিত রয়েছে, এবং আমি + চালানোর অনুমতিগুলি পড়েছি somefile) তবে হুডের নীচে কী ঘটে?
আমি ভেবেছিলাম উত্তরটি ছিল:
- শেলটি একটি
execপাথর তৈরি করে, পাথটি অতিক্রম করেsomefile - কার্নেল পরীক্ষা করে ফাইলের ম্যাজিক নম্বরটি
somefileদেখে এটি প্রসেসর হ্যান্ডল করতে পারে এমন কোনও ফর্ম্যাট কিনা তা নির্ধারণ করে - যদি ম্যাজিক নম্বরটি নির্দেশ করে যে ফাইলটি কোনও ফর্ম্যাটে রয়েছে তবে প্রসেসর চালাতে পারে
- একটি নতুন প্রক্রিয়া তৈরি করা হয় (প্রক্রিয়া সারণিতে একটি এন্ট্রি সহ)
somefileমেমোরিতে পড়া / ম্যাপ করা হয়। একটি স্ট্যাক তৈরি করা হয় ও মৃত্যুদন্ড এর কোডের এন্ট্রি পয়েন্ট থেকে জাম্পsomefileসঙ্গেARGV(ক প্যারামিটার একটি অ্যারের সক্রিয়াchar**,["some","arguments"])
- ম্যাজিক নম্বর হল যদি একটি কুঁড়েঘর তারপর
exec()উপরে হিসাবে একটি নতুন প্রক্রিয়া spawns কিন্তু এক্সিকিউটেবল ব্যবহৃত অনুবাদক কুঁড়েঘর দ্বারা সমর্থিত (যেমন হয়/bin/bashবা/bin/perl) এবংsomefileপ্রেরণ করাSTDIN - যদি ফাইলটির বৈধ যাদু নম্বর না থাকে তবে "অবৈধ ফাইল (খারাপ যাদু নম্বর): এক্সিকিউট ফর্ম্যাট ত্রুটি" এর মতো একটি ত্রুটি ঘটে
তবে কেউ আমাকে বলেছে যে ফাইলটি যদি সরল পাঠ্য হয় তবে শেলটি কমান্ডগুলি কার্যকর করার চেষ্টা করে (যেন আমি টাইপ করেছি bash somefile )। আমি এটি বিশ্বাস করি নি, তবে আমি এটি চেষ্টা করেছিলাম, এবং এটি সঠিক ছিল। সুতরাং এখানে আসলে কী ঘটে যায় সে সম্পর্কে আমার স্পষ্টত কিছু ভুল ধারণা রয়েছে এবং যান্ত্রিকগুলি বুঝতে চাই।
আমি যখন আমার শেলটিতে একটি ফাইল কার্যকর করি তখন ঠিক কী ঘটে? (যতটা বিস্তারিতভাবে যুক্তিসঙ্গত ...)
source somefile./somefileযদিও একটি নতুন প্রক্রিয়াটি বন্ধ হয়ে যাওয়ার চেয়ে আলাদা from
./somefileবাশ কমান্ডগুলি কার্যকর করতে পারে somefile। আমি ভেবেছিলাম এটি কেবল একটি ত্রুটি প্রদর্শন করবে এবং পরিবর্তে এটি কার্যকরভাবে প্রদর্শিত হবেsource somefile
somefileএটি একটি পাঠ্য ফাইল হয়, তবে আমি যদি এটি সম্পাদন করার চেষ্টা করি তবে একটি নতুন শেল তৈরি হয়। echo $$যদি আমি বনাম উত্সটি সম্পাদন করি তবে একটি ফাইল আলাদা আচরণ করে।