আমি যখন killall -9 name
কোনও প্রোগ্রাম হত্যা করতাম , তখন রাষ্ট্রটি জম্বি হয়ে যায়। কয়েক মিনিট পরে, এটি সত্যিই বন্ধ হয়ে গেল। তো, এই মিনিটের মধ্যে কী ঘটছে?
আমি যখন killall -9 name
কোনও প্রোগ্রাম হত্যা করতাম , তখন রাষ্ট্রটি জম্বি হয়ে যায়। কয়েক মিনিট পরে, এটি সত্যিই বন্ধ হয়ে গেল। তো, এই মিনিটের মধ্যে কী ঘটছে?
উত্তর:
প্রোগ্রামটি কখনই সিগ্কিল সিগন্যাল পায় না, কারণ সিগ্কিল সম্পূর্ণ অপারেটিং সিস্টেম / কার্নেল দ্বারা পরিচালিত হয়।
নির্দিষ্ট প্রক্রিয়াটির জন্য সিগ্কিল প্রেরণ করা হলে, কার্নেলের শিডিয়ুলার তাত্ক্ষণিকভাবে ব্যবহারকারী-স্পেস কোড চালানোর জন্য সেই প্রক্রিয়াটিকে আরও সিপিইউ সময় দেওয়া বন্ধ করে দেয়। প্রক্রিয়াটির সময়সূচক এই সিদ্ধান্ত নেওয়ার সময় অন্য সিপিইউ / কোরগুলিতে ব্যবহারকারী-স্পেস কোড চালিত কোনও থ্রেড রাখে, সেই থ্রেডগুলিও বন্ধ হয়ে যাবে। (সিঙ্গল কোর সিস্টেমে এটি অনেক সহজ ব্যবহৃত হত: যদি সিস্টেমের একমাত্র সিপিইউ কোর শিডিয়ুলার চালাচ্ছিল তবে সংজ্ঞা অনুসারে এটি একই সময়ে প্রক্রিয়াটি চালাচ্ছিল না!)
যদি প্রসেস / থ্রেড সিগিলের সময় কার্নেল কোড (যেমন একটি সিস্টেম কল, বা একটি মেমরি-ম্যাপযুক্ত ফাইলের সাথে যুক্ত আই / ও অপারেশন) চালাচ্ছে তবে এটি কিছুটা কৌতুকপূর্ণ হয়: কেবলমাত্র কয়েকটি সিস্টেম কলগুলি বাধা দেওয়া যায়, তাই সিস্টেম কল বা I / O ক্রিয়াকলাপ সমাধান না হওয়া অবধি কার্নেল অভ্যন্তরীণভাবে প্রক্রিয়াটিকে একটি বিশেষ "মরণশীল" অবস্থায় চিহ্নিত করে। সেগুলি সমাধানের সিপিইউ সময় যথারীতি নির্ধারিত হবে। বাধাপ্রাপ্ত সিস্টেম কল বা I / O ক্রিয়াকলাপগুলি যা তাদের ডেকে আনে সেই প্রক্রিয়াটি কোনও উপযুক্ত স্টপিং পয়েন্টগুলিতে মারা যাচ্ছে কিনা তা যাচাই করবে এবং সেই ক্ষেত্রে তাড়াতাড়ি প্রস্থান করবে। নিরবচ্ছিন্ন ক্রিয়াকলাপগুলি সমাপ্তিতে পরিচালিত হবে এবং ব্যবহারকারী-স্পেস কোডে ফিরে আসার ঠিক আগে "মরণশীল" রাষ্ট্রের জন্য পরীক্ষা করবে।
কোনও প্রক্রিয়াকরণের কার্নেল রুটিনগুলি সমাধান হয়ে গেলে, প্রক্রিয়া অবস্থাটি "মরা" থেকে "মৃত" হয়ে যায় এবং কার্নেল এটি পরিষ্কার করা শুরু করে, যখন কোনও প্রোগ্রাম সাধারণত বেরিয়ে আসে। একবার ক্লিন-আপ সম্পূর্ণ হয়ে গেলে, 128-এরও বেশি ফলাফলের কোডটি বরাদ্দ করা হবে (প্রক্রিয়াটি একটি সংকেত দ্বারা হত্যা করা হয়েছিল তা বোঝাতে; অগোছালো বিশদের জন্য এই উত্তরটি দেখুন ), এবং প্রক্রিয়াটি "জম্বি" অবস্থায় রূপান্তরিত হবে । নিহত প্রক্রিয়াটির পিতামাতাকে একটি SIGCHLD সংকেত দ্বারা অবহিত করা হবে।
ফলস্বরূপ, প্রক্রিয়াটি নিজেই যে তথ্যটি একটি সিগিল পেয়েছে তা বাস্তবে প্রক্রিয়াকরণের সুযোগ পাবে না।
কোনও প্রক্রিয়া যখন "জম্বি" অবস্থায় থাকে তার অর্থ প্রক্রিয়াটি ইতিমধ্যে মারা গেছে তবে wait(2)
সিস্টেম কলটি ব্যবহার করে ডেড প্রক্রিয়াটির প্রস্থান কোডটি পড়ে এটির প্যারেন্ট প্রসেসটি এখনও এটি স্বীকার করে নি । মূলত একটি জম্বি প্রক্রিয়া এখন আর যে পরিমাণ গ্রাস করছে তা হ'ল প্রক্রিয়া টেবিলের একটি স্লট যা তার পিআইডি, প্রস্থান কোড এবং মৃত্যুর সময় প্রক্রিয়াটির কয়েকটি "গুরুত্বপূর্ণ পরিসংখ্যান" ধারণ করে।
যদি পিতামাতা প্রক্রিয়াটি তার বাচ্চাদের আগে মারা যায়, তবে অনাথ শিশু প্রক্রিয়াগুলি পিআইডি # 1 দ্বারা স্বয়ংক্রিয়ভাবে গৃহীত হয়, যার কল রাখা চালানোর বিশেষ কর্তব্য রয়েছে wait(2)
যাতে কোনও অনাথ প্রক্রিয়া জম্বি হিসাবে না যায়।
যদি কোনও জম্বি প্রক্রিয়াটি সাফ হতে কয়েক মিনিট সময় নেয় তবে এটি পরামর্শ দেয় যে জম্বিটির পিতামাতার প্রক্রিয়াটি লড়াই করছে বা সঠিকভাবে তার কাজটি করছে না।
ইউনিক্স-এর মতো অপারেটিং সিস্টেমে জম্বি সমস্যার ক্ষেত্রে কী করা উচিত সে সম্পর্কে জিহ্বা-ইন-গাল বর্ণনা রয়েছে: "জম্বিরা ইতিমধ্যে মারা গেছে বলে আপনি নিজেরাই কিছু করতে পারবেন না Instead পরিবর্তে দুষ্ট জম্বি কর্তাকে হত্যা করুন! " (অর্থাত্ ঝামেলা জম্বিগুলির মূল প্রক্রিয়া)
ps
: 'এস' I / O এর জন্য অপেক্ষা করে যে কোনও সংকেত সরবরাহ করতে কার্নেলটি বাতিল করতে পারে এবং 'ডি' তাদের পক্ষে এটি সম্ভব নয়।