ইউনিক্স-এ, যখন কোনও পিতামাতার প্রক্রিয়াটি অদৃশ্য হয়ে যায়, তখন আমি ভেবেছিলাম যে সমস্ত শিশু প্রক্রিয়াগুলি তাদের পিতামাতা হিসাবে পুনরায় সেট করে। এটি কি সব সময় সঠিক হয় না? কোন ব্যতিক্রম আছে?
ইউনিক্স-এ, যখন কোনও পিতামাতার প্রক্রিয়াটি অদৃশ্য হয়ে যায়, তখন আমি ভেবেছিলাম যে সমস্ত শিশু প্রক্রিয়াগুলি তাদের পিতামাতা হিসাবে পুনরায় সেট করে। এটি কি সব সময় সঠিক হয় না? কোন ব্যতিক্রম আছে?
উত্তর:
আমার মন্তব্যে উত্তরে সরানো .... আমি বিশ্বাস করি না এর ব্যতিক্রম আছে।
এটি "কখনও কখনও পিতামাতার প্রক্রিয়াটি তার শিশু হত্যার আগে মারা যায় Found এই ক্ষেত্রে," সমস্ত প্রক্রিয়ার পিতা-মাতা " init
প্রক্রিয়াটি নতুন পিপিআইডি (প্যারেন্ট প্রসেস আইডি) হয়ে যায় Some এই প্রক্রিয়াগুলিকে কখনও কখনও এতিম প্রক্রিয়া বলা হয়।" সূত্র
আইবিএম-এর ব্লগে একইভাবে বর্ণনা করা হয়েছে : "পিতা-মাতা বাচ্চার আগে মারা যায় বা মারা যায় the উপরের দৃশ্যে, শিশু প্রক্রিয়াটি এতিম প্রক্রিয়াতে পরিণত হয় (যেমন এটি তার পিতামাতাকে হারিয়েছে)। লিনাক্সে, প্রক্রিয়াটি শিশুটির init
উদ্ধারে আসে এতিম প্রক্রিয়াগুলি এবং এগুলি গ্রহণ করে This এর অর্থ একটি শিশু তার পিতামাতাকে হারানোর পরে, init
প্রক্রিয়াটি তার নতুন পিতামাতার প্রক্রিয়াতে পরিণত হয় ""
২০১৪ সালে তিনটি উত্তর লিখিত, সমস্তই বলেছে যে ইউনিসে এবং লিনাক্সে প্রক্রিয়াটি ব্যতিক্রম ছাড়াই # 1 প্রক্রিয়াটিকে পুনরায় প্রতিস্থাপন করা হয়। তিনটি ভুল উত্তর। ☺
এসইএস যেমন বলেছে, এখানে অন্য উত্তরের একটিতে উদ্ধৃত তাই আমি এটিকে আবার উদ্ধৃত করব না, এতিম শিশুদের পিতামাতার প্রক্রিয়াটি একটি বাস্তবায়ন-সংজ্ঞায়িত প্রক্রিয়াতে সেট করা আছে । ক্রিশ্চিয়ান সিউপিতু বাস্তবায়ন কী সংজ্ঞা দেয় তা দেখতে লিনাক্স ডকুমেন্টেশনের সাথে পরামর্শ করা ঠিক। তবে তাকে সেই ডকুমেন্টেশন দ্বারা বিভ্রান্ত করা হচ্ছে যা অসামঞ্জস্যপূর্ণ এবং আপ টু ডেট নয়।
এই তিনটি উত্তর লেখার দু'বছর আগে এবং তিন বছর আগে দ্রুত এই উত্তরটি লেখার সময় লিনাক্সের কার্নেলটি পরিবর্তিত হয়েছিল। সিস্টেমড বিকাশকারীরা তাদের "সাবরেইপারস" হিসাবে সেট আপ করার প্রক্রিয়াগুলির সক্ষমতা যুক্ত করেছিল। লিনাক্স ৩.৪ এর পরে প্রক্রিয়াগুলি বিকল্পের prctl()
সাথে সিস্টেম কলটি ইস্যু করতে পারে PR_SET_CHILD_SUBREAPER
এবং ফলস্বরূপ তারা # 1 প্রক্রিয়া নয় বরং তাদের অনাথ বংশধরদের কোনও প্রক্রিয়ার পিতামাতায় পরিণত হবে। এর জন্য ম্যান পেজটিprctl()
আপ টু ডেট but তবে অন্যান্য ম্যান পেজগুলি আপ টু ডেটে আনা হয়নি এবং ধারাবাহিকভাবে তৈরি করা হয়নি।
সংস্করণ 10.2 এ, ফ্রিবিএসডি একই ক্ষমতা অর্জন করেছে এবং এর বিদ্যমান procctl()
সিস্টেম কল PROC_REAP_ACQUIRE
এবং PROC_REAP_RELEASE
বিকল্পগুলির সাথে প্রসারিত করে । এটি ড্রাগন ফ্লাই বিএসডি থেকে এই প্রক্রিয়াটি গ্রহণ করেছে; যা এটি 4.2 সংস্করণে অর্জন করেছে, মূল নামে reapctl()
থাকলেও উন্নয়নের সময় নামকরণ হয়েছে procctl()
।
সুতরাং ব্যতিক্রম এবং মোটামুটি বিশিষ্টগুলি রয়েছে: লিনাক্স, ফ্রিবিএসডি / পিসি-বিএসডি, এবং ড্রাগনফ্লাই বিএসডি-তে অনাথ শিশুদের পিতামাতার প্রক্রিয়াটি সন্তানের নিকটতম পূর্বপুরুষ প্রক্রিয়াতে সেট করা হয় যা সাব্রাইপার হিসাবে চিহ্নিত করা হয়, বা প্রক্রিয়া # 1 যদি কোনও পূর্বপুরুষ সাব্রাইপার প্রক্রিয়া না থাকে। বিভিন্ন ডিমন তত্ত্বাবধানের ইউটিলিটিগুলি - সিস্টেমড সহ (যার বিকাশকারীরা এটি প্রথমে লিনাক্স কার্নেলের মধ্যে ফেলেছেন), আপস্টার্ট এবং নশ service-manager
- ইতিমধ্যে এটি ব্যবহার করে make
যেমন একটি ডেমন সুপারভাইজার # 1 প্রক্রিয়া না থাকে, এবং এটি একটি ইন্টারেক্টিভ লগইন অধিবেশন হিসাবে একটি সেবা spawns, এবং যে অধিবেশন এক করে ডাবল দ্বারা "daemonize" প্রয়াস এর (বেশ wrongheaded) কৌতুক fork()
ING , তারপর এক প্রক্রিয়াকে হবে প্রক্রিয়া # 1 নয়, ডেমন সুপারভাইজারের সন্তান হিসাবে শেষ করুন। লগইন সেশনের মধ্যে থেকে সরাসরি ডেমনগুলি স্প্যান করতে সক্ষম হওয়া আশা করা অবশ্যই একটি মৌলিক ভুল। তবে এটি অন্য উত্তর।
procctl()
। ড্রাগন ফ্লাই বিএসডি ম্যানুয়াল পৃষ্ঠাগুলি। । 2।exit
দ্য সিঙ্গল ইউনিক্স স্পেসিফিকেশন, সংস্করণ 2 এর ম্যান পেজ অনুসারে :
কলিং প্রসেসের সমস্তর প্যারেন্ট প্রসেস আইডি 'বিদ্যমান শিশু প্রসেস এবং জম্বি প্রসেসগুলি প্রয়োগকরণ-নির্ভর সিস্টেম প্রক্রিয়াটির প্রসেস আইডিতে সেট করা থাকে। অর্থাৎ, এই প্রক্রিয়াগুলি একটি বিশেষ সিস্টেম প্রক্রিয়া দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
বেশিরভাগ ইউনিক্স ভেরিয়েন্টের জন্য, সেই বিশেষ প্রক্রিয়াটি init
(পিআইডি 1)।
লিনাক্স wait(2)
ম্যান পৃষ্ঠাটি এটি নিশ্চিত করে:
যদি কোনও পিতামাতার প্রক্রিয়াটি সমাপ্ত হয়, তবে এর "জম্বি" বাচ্চাদের (যদি থাকে) টি আর (8) দ্বারা গৃহীত হয়, যা স্বয়ংক্রিয়ভাবে জম্বিগুলি অপসারণের জন্য অপেক্ষা করে।
ফ্রিবিএসডি wait(2)
, নেটবিএসডি wait(2)
, ওপেনবিএসডি wait(2)
এবং ম্যাক ওএস এক্স wait(2)
ম্যান পেজগুলি এটিও নিশ্চিত করে:
যদি কোনও পিতামাতার প্রক্রিয়াটি তার সমস্ত শিশু প্রক্রিয়াটির সমাপ্তির জন্য অপেক্ষা না করেই বন্ধ হয়ে যায় তবে অবশিষ্ট শিশু প্রক্রিয়াগুলি প্যারেন্ট প্রসেস 1 আইডি (init প্রক্রিয়া আইডি) বরাদ্দ করা হয়।
ওরাকল সোলারিস 11.1 wait(3C)
ম্যান পৃষ্ঠা এটিও নিশ্চিত করে:
যদি কোনও পিতামাতার প্রক্রিয়াটি তার সন্তানের প্রক্রিয়াগুলি শেষ হওয়ার অপেক্ষা না করেই বন্ধ হয়ে যায় তবে প্রতিটি শিশু প্রক্রিয়াটির প্যারেন্ট প্রসেস আইডি 1 তে সেট করা থাকে, প্রারম্ভিককরণ প্রক্রিয়াটি শিশু প্রক্রিয়াগুলির উত্তরাধিকার সূত্রে প্রাপ্ত হয়; দেখতে
Intro(2)
।
আমি বিশ্বাস করি না। এটি সর্বদা init প্রক্রিয়াতে যায়।