কড়া কথায় বলতে গেলে, ডাবল-ফর্কটির সন্তানের হয়ে ডেমনকে পুনরায় প্যারেন্টিংয়ের সাথে কোনও সম্পর্ক নেই init
। সন্তানের পুনঃ-পিতামাতার জন্য যা যা প্রয়োজন তা হ'ল পিতামাতার প্রস্থান করা উচিত। এটি কেবল একটি একক কাঁটাচামচ দিয়ে করা যেতে পারে। এছাড়াও, নিজের দ্বারা একটি দ্বি-কাঁটাচামচ করা ডেমন প্রক্রিয়াটির পুনরায় পিতামাতার নয় init
; ডেমন এর পিতামাতার অবশ্যই প্রস্থান করতে হবে। অন্য কথায়, ডেমোন প্রক্রিয়াটি পুনরায় প্যারেন্টেড হওয়ার জন্য পিতামাতা সর্বদা সঠিক ডেমোন ফোর করার সময় উপস্থিত হন init
।
তাহলে কেন ডাবল কাঁটা? POSIX.1-2-2008 ধারা 11.1.3, " নিয়ন্ত্রণকারী টার্মিনাল " এর উত্তর রয়েছে (জোর দেওয়া হয়েছে):
একটি অধিবেশন জন্য নিয়ামক টার্মিনাল একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে সেশন নেতা দ্বারা বরাদ্দ করা হয়। যদি কোনও সেশন নেতার কোনও নিয়ন্ত্রণকারী টার্মিনাল না থাকে এবং একটি টার্মিনাল ডিভাইস ফাইল খোলে যা ইতিমধ্যে O_NOCTTY
বিকল্পটি (দেখুন open()
) ব্যবহার না করে কোনও সেশনের সাথে সম্পর্কিত নয় , এটি টার্মিনালটি সেশন লিডারের নিয়ন্ত্রণকারী টার্মিনাল হয়ে যায় কিনা তা প্রয়োগ-সংজ্ঞায়িত। যদি কোনও প্রক্রিয়া যা সেশন লিডার না হয় কোনও টার্মিনাল ফাইল খুললে, বা O_NOCTTY
বিকল্পটি ব্যবহার করা হয় open()
, তবে সেই টার্মিনাল কলিং প্রক্রিয়ার নিয়ন্ত্রণকারী টার্মিনাল হয়ে উঠবে না ।
এটি আমাদের জানায় যে ডেমন প্রক্রিয়া যদি এরকম কিছু করে ...
int fd = open("/dev/console", O_RDWR);
... তাহলে ডিমন প্রক্রিয়াটি সেশন লিডার কিনা এবং সিস্টেম প্রয়োগের উপর নির্ভর করে ডিমন প্রক্রিয়াটি তার নিয়ন্ত্রণকারী টার্মিনাল হিসাবে অর্জন করতে পারে/dev/console
। প্রোগ্রামটি গ্যারান্টি দিতে পারে যে উপরের কলটি কোনও নিয়ন্ত্রণকারী টার্মিনাল গ্রহণ করবে না যদি প্রোগ্রামটি প্রথম নিশ্চিত করে যে এটি কোনও সেশন লিডার নয়।
সাধারণত, ডেমন চালু করার সময়, ডেমনটিকে নিয়ন্ত্রণকারী টার্মিনাল থেকে বিচ্ছিন্ন করার জন্য setsid
(কল করার পরে শিশু প্রক্রিয়া থেকে fork
) বলা হয়। তবে, কলিংয়ের setsid
অর্থ হ'ল কলিং প্রক্রিয়াটি নতুন অধিবেশনটির সেশন লিডার হবে, যা ডেমন একটি নিয়ন্ত্রণকারী টার্মিনালটির পুনরায় জয় লাভের সম্ভাবনা উন্মুক্ত করে। দ্বৈত-কাঁটাচামচ কৌশলটি নিশ্চিত করে যে ডিমন প্রক্রিয়াটি সেশন লিডার নয়, যা গ্যারান্টি দেয় যে open
উপরের উদাহরণ হিসাবে যেমন ডেমন প্রক্রিয়া একটি নিয়ন্ত্রণকারী টার্মিনালটির পুনঃনির্ধারণের ফলাফল দেয় না।
ডাবল-কাঁটাচামচ কৌশলটি কিছুটা ভৌতিক। এটি আপনি যদি জানেন যে ডিমন কখনই কোনও টার্মিনাল ডিভাইস ফাইল খুলবে না necessary এছাড়াও, কিছু সিস্টেমে এটি ডেমন একটি টার্মিনাল ডিভাইস ফাইল খোলার পরেও প্রয়োজনীয় নাও হতে পারে, কারণ আচরণটি বাস্তবায়ন-সংজ্ঞায়িত। যাইহোক, একটি জিনিস যা বাস্তবায়ন-সংজ্ঞায়িত নয় তা হ'ল কেবল একটি সেশন লিডার নিয়ন্ত্রণকারী টার্মিনাল বরাদ্দ করতে পারে। যদি কোনও প্রক্রিয়া সেশন লিডার না হয় তবে এটি একটি নিয়ন্ত্রণকারী টার্মিনাল বরাদ্দ করতে পারে না। অতএব, আপনি যদি ভৌতিক হতে চান এবং নিশ্চিত হন যে ডিমন প্রক্রিয়া অজান্তেই কোনও নিয়ন্ত্রণকারী টার্মিনাল অর্জন করতে পারে না, কোনও প্রয়োগ-নির্ধারিত নির্দিষ্টতা নির্বিশেষে, তবে ডাবল-ফর্ক কৌশলটি প্রয়োজনীয়।