যখন কোনও প্রক্রিয়া ব্যবহারকারী মোডে থাকে, এটি যে কোনও সময় বাধা দিতে পারে (কার্নেল মোডে স্যুইচ করা)) কার্নেলটি যখন ব্যবহারকারী মোডে ফিরে আসে, এটি কোনও সংকেত মুলতুবি রয়েছে কিনা তা পরীক্ষা করে (প্রসেসটি মেরে ফেলার জন্য ব্যবহৃত হয় এমনগুলি সহ SIGTERM
এবং যেমন SIGKILL
) cks এর অর্থ কেবল কোনও ব্যবহারকারী মোডে ফিরে আসার পরে কোনও প্রক্রিয়া মারা যেতে পারে।
কার্নেল মোডে কোনও প্রক্রিয়া মারা না যাওয়ার কারণটি হ'ল এটি একই মেশিনে অন্যান্য সমস্ত প্রক্রিয়া দ্বারা ব্যবহৃত কার্নেল কাঠামোকে সম্ভাব্যভাবে দূষিত করতে পারে (একইভাবে একটি থ্রেড হত্যা করে একই প্রক্রিয়াতে অন্যান্য থ্রেড দ্বারা ব্যবহৃত ডেটা স্ট্রাকচারগুলি দূষিত করতে পারে) ।
যখন কার্নেলটিকে এমন কিছু কাজ করতে হবে যা দীর্ঘ সময় নিতে পারে (অন্য কোনও প্রক্রিয়া দ্বারা রচিত পাইপের উপর অপেক্ষা করা বা হার্ডওয়্যারটির জন্য কিছু করার জন্য অপেক্ষা করা, উদাহরণস্বরূপ), এটি ঘুমন্ত হিসাবে নিজেকে চিহ্নিত করে এবং সময়সূচীটিকে অন্যটিতে যেতে কল করে ঘুমায় প্রক্রিয়া (যদি কোনও ঘুমন্ত প্রক্রিয়া না থাকে তবে এটি একটি "ডামি" প্রক্রিয়াতে স্যুইচ করে যা সিপিইউকে কিছুটা কমিয়ে দেয় এবং একটি লুপে বসে থাকে - নিষ্ক্রিয় লুপ)।
যদি একটি সিগন্যাল কোনও ঘুমন্ত প্রক্রিয়াতে প্রেরণ করা হয় তবে এটি ব্যবহারকারীর স্পেসে ফিরে আসার আগে এটি জাগ্রত হতে হবে এবং এভাবে স্থগিত সিগন্যালটি প্রক্রিয়া করবে। এখানে আমাদের দুটি মূল ধরণের ঘুমের মধ্যে পার্থক্য রয়েছে:
TASK_INTERRUPTIBLE
, অবিচ্ছিন্ন ঘুম। যদি এই পতাকাটি দিয়ে কোনও কাজ চিহ্নিত করা হয়, তবে এটি ঘুমাচ্ছে, তবে সংকেত দিয়ে জাগানো যেতে পারে। এর অর্থ কোডটি যা কার্যকে চিহ্নিত করেছে কারণ ঘুমন্ত একটি সম্ভাব্য সংকেতের প্রত্যাশা করছে এবং ঘুম থেকে ওঠার পরে এটি পরীক্ষা করে সিস্টেম কল থেকে ফিরে আসবে। সিগন্যালটি হ্যান্ডেল হওয়ার পরে, সিস্টেম কলটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হতে পারে (এবং এটি কীভাবে কাজ করে সে সম্পর্কে আমি বিশদে যাব না)।
TASK_UNINTERRUPTIBLE
, নিরবচ্ছিন্ন ঘুম। যদি এই পতাকাটি দিয়ে কোনও কাজ চিহ্নিত করা হয়, তবে এটি সহজেই পুনরায় আরম্ভ করা যায় না, বা প্রোগ্রামগুলি সিস্টেম কলটি পারমাণবিক হওয়ার প্রত্যাশা করে, কারণ এটি অপেক্ষা করা অপেক্ষা ব্যতীত অন্য কোনও কিছুর দ্বারা জাগ্রত হওয়ার আশা করা যায় না। এটি খুব সংক্ষিপ্ত হিসাবে পরিচিত ঘুমের জন্যও ব্যবহার করা যেতে পারে।
TASK_KILLABLE
(ডিডাএর উত্তরের সাথে যুক্ত এলডব্লিউএন নিবন্ধে উল্লিখিত) একটি নতুন বৈকল্পিক।
এটি আপনার প্রথম প্রশ্নের উত্তর দেয়। আপনার দ্বিতীয় প্রশ্ন হিসাবে: আপনি নিরবচ্ছিন্ন ঘুম এড়াতে পারবেন না, এগুলি একটি সাধারণ জিনিস (উদাহরণস্বরূপ, প্রতিবার কোনও প্রক্রিয়া ডিস্ক থেকে / ডিস্কে / পড়তে লিখতে হয়); যাইহোক, তাদের এক সেকেন্ডের একটি ভগ্নাংশ স্থায়ী হওয়া উচিত। যদি তারা বেশি দিন স্থায়ী হয় তবে এর অর্থ সাধারণত একটি হার্ডওয়্যার সমস্যা (বা কোনও ডিভাইস ড্রাইভারের সমস্যা, যা কার্নেলের সাথে একই দেখা যায়), যেখানে ডিভাইস ড্রাইভারটি হার্ডওয়্যারটির এমন কিছু করার জন্য অপেক্ষা করছে যা কখনই ঘটে না। এর অর্থ এইও হতে পারে যে আপনি এনএফএস ব্যবহার করছেন এবং এনএফএস সার্ভারটি ডাউন (এটি সার্ভারটির পুনরুদ্ধার করার জন্য অপেক্ষা করছে; সমস্যা এড়াতে আপনি "ইন্টার" বিকল্পটিও ব্যবহার করতে পারেন)।
পরিশেষে, আপনি পুনরুদ্ধার করতে না পারার কারণ হ'ল সিগন্যাল সরবরাহ করতে বা প্রক্রিয়াটি মেরে ফেলার জন্য কার্নেলটি ব্যবহারকারী মোডে ফিরে না আসা পর্যন্ত অপেক্ষা করে: এটি সম্ভবত কার্নেলের ডেটা স্ট্রাকচারকে দূষিত করবে (একটি বাধাপ্রাপ্ত ঘুমের জন্য অপেক্ষা করা কোডটি একটি ত্রুটি পেতে পারে যা এটি বলেছে) ব্যবহারকারীর জায়গায় ফিরে যেতে, যেখানে প্রক্রিয়াটি মারা যেতে পারে; একটি নিরবচ্ছিন্ন ঘুমের জন্য অপেক্ষা করা কোড কোনও ত্রুটির আশা করে না)।
TASK_UNINTERUPTIBLE
সিস্টেমের নিষ্ক্রিয় অবস্থায় না থাকা অবস্থায় এমন একটি প্রক্রিয়া শুরু করার জন্য কোনও প্রোগ্রাম লেখা যেতে পারে যখন সিস্টেমটি নিষ্ক্রিয় অবস্থায় না থাকে, তারপরে জোর করে ডেটা সংগ্রহ করে, সুপার ব্যবহারকারীর প্রস্থানের পরে প্রেরণের জন্য অপেক্ষা করে? হ্যাকারদের কাছে তথ্য পুনরুদ্ধার করা, জম্বি অবস্থায় ফিরে আসা এবং নিষ্ক্রিয় নেটওয়ার্কের মাধ্যমে তথ্য প্রেরণ করার জন্য এটি সোনার মাইন হবে। কিছু যুক্তি দিতে পারে যে যেBlackdoor
শক্তিগুলি হতে পারে তার জন্য তৈরি করা এবং ইচ্ছামত যেকোন সিস্টেমে প্রবেশ এবং প্রস্থান করার এটি একটি উপায় । আমি দৃ