عملية اليتيم
العملية اليتيمة هي عملية حاسوبية انتهت أو توقفت عمليتها الأصلية ، على الرغم من أنها لا تزال تعمل بنفسها.
شبيهة بنظام يونكس
في أنظمة التشغيل الشبيهة بنظام يونكس، يتم تبني أي عملية يتيمة فورًا بواسطة عملية نظام محددة من قِبل النظام: حيث تُعيّن النواة هذه العملية كعملية أصلية. تُسمى هذه العملية إعادة التوجيه، وتحدث تلقائيًا. على الرغم من أن العملية، من الناحية التقنية، لها عملية نظام كعملية أصلية، إلا أنها تُسمى عملية يتيمة لأن العملية التي أنشأتها في الأصل لم تعد موجودة. في أنظمة أخرى، تُنهي النواة العمليات اليتيمة فورًا. تاريخيًا، استخدمت معظم أنظمة يونكس عملية init كعملية نظام تُعاد إليها العمليات اليتيمة، ولكن في أنظمة DragonFly BSD و FreeBSD و Linux الحديثة، قد تُعاد العملية اليتيمة إلى عملية "حاصدة فرعية" بدلًا من init . [ 1 ] [ 2 ]
قد تُصبح عملية ما يتيمةً دون قصد، كما يحدث عند إنهاء العملية الأصلية أو تعطلها. يُمكن استخدام آلية مجموعات العمليات في معظم أنظمة التشغيل الشبيهة بنظام يونكس للمساعدة في الحماية من اليتم العرضي، حيث تُحاول هذه الآلية، بالتنسيق مع واجهة المستخدم ، إنهاء جميع العمليات الفرعية باستخدام إشارة "إنهاء الاتصال" ( SIGHUP )، بدلاً من تركها تستمر في العمل كعمليات يتيمة. وبشكل أدق، كجزء من التحكم في العمليات ، عند خروج واجهة المستخدم، ولأنها "قائدة الجلسة" (معرّف جلستها يُساوي معرّف عمليتها)، تنتهي جلسة تسجيل الدخول المقابلة ، وتُرسل واجهة المستخدم إشارة SIGHUP إلى جميع عملياتها (التمثيل الداخلي لمجموعات العمليات).
قد يكون من المستحسن أحيانًا ترك عملية ما معزولة عمدًا، عادةً للسماح لمهمة طويلة الأمد بالانتهاء دون تدخل المستخدم، أو لبدء خدمة أو وكيل يعمل بشكل دائم؛ تُعرف هذه العمليات (بدون جلسة مرتبطة بها) باسم "الخدمات الخلفية " ، خاصةً إذا كانت تعمل بشكل دائم. يتمثل أحد الأساليب البسيطة في إنشاء عملية فرعية مرتين، وتشغيل العملية المطلوبة في العملية الفرعية، ثم إنهاء العملية الفرعية فورًا. تصبح العملية الفرعية الآن معزولة، ولا تتبناها العملية الأصلية، بل تتبناها عملية التهيئة (init). أما البدائل الأكثر تعقيدًا فتتجاوز آلية معالجة انقطاع الاتصال في الصدفة، إما بإخبار العملية الفرعية بتجاهل إشارة SIGHUP (باستخدام الأمر nohup )، أو بإزالة المهمة من جدول المهام، أو بإخبار الصدفة بعدم إرسال إشارة SIGHUP عند انتهاء الجلسة (باستخدام الأمر disown في كلتا الحالتين). على أي حال، فإن معرف الجلسة (معرف العملية لقائد الجلسة، الصدفة) لا يتغير، ويظل معرف العملية للجلسة التي انتهت قيد الاستخدام حتى تنتهي جميع العمليات اليتيمة أو تغير معرف الجلسة (عن طريق بدء جلسة جديدة عبر setsid(2)).
لتبسيط إدارة النظام، يُفضّل غالبًا استخدام غلاف خدمة لضمان استجابة العمليات غير المصممة للعمل كخدمات بشكل صحيح لإشارات النظام. وثمة بديل للحفاظ على استمرارية العمليات دون انقطاعها، وهو استخدام مُضاعِف طرفي وتشغيل العمليات في جلسة منفصلة (أو جلسة تُصبح منفصلة)، بحيث لا تُنهى الجلسة ولا تنقطع العملية.
ويُقال أيضاً أن عملية الخادم أصبحت يتيمة عندما يتعطل العميل الذي بدأ الطلب بشكل غير متوقع بعد تقديم الطلب مع ترك عملية الخادم قيد التشغيل.
تُهدر هذه العمليات غير المُدارة موارد الخادم، وقد تُؤدي إلى نقص حاد في موارده. ومع ذلك، توجد عدة حلول لمشكلة العمليات غير المُدارة:
- الإبادة هي الأسلوب الأكثر استخداماً؛ في هذه الحالة يتم قتل اليتيم.
- التناسخ هو أسلوب تحاول فيه الآلات بشكل دوري تحديد موقع أصول أي عمليات حسابية بعيدة؛ وعند هذه النقطة يتم قتل العمليات اليتيمة.
- انتهاء الصلاحية هو أسلوب يُخصص فيه لكل عملية مدة زمنية محددة لإتمامها قبل إيقافها. وإذا لزم الأمر، يمكن للعملية أن "تطلب" مزيدًا من الوقت لإتمامها قبل انتهاء المدة المخصصة لها.
انظر أيضاً
مراجع
- ↑ "ما هي عملية "الحاصد الفرعي"؟ "
- ↑ "عملية أصلية جديدة عند موت العملية الأصلية" .
بدءًا من نظام لينكس 3.4، يمكن للعمليات إصدار استدعاء النظام prctl() مع الخيار PR_SET_CHILD_SUBREAPER، ونتيجة لذلك، ستصبح هي، وليس العملية رقم 1، العملية الأصلية لأي من العمليات التابعة لها التي فقدت الاتصال.
- " 10.6.4 مجموعات العمليات اليتيمة "، نموذج العمليات لتطوير تطبيقات لينكس ، بقلم إريك دبليو. ترون ومايكل ك. جونسون، 8 يوليو 2005
- عملية (حوسبة)
