الصفحة الرئيسية » howto » ما هي عملية الزومبي على لينكس؟

    ما هي عملية الزومبي على لينكس؟

    إذا كنت مستخدمًا لنظام التشغيل Linux ، فربما تكون قد شاهدت عمليات زومبي تشوش حول قائمة العمليات الخاصة بك. لا يمكنك قتل عملية زومبي لأنها ميتة بالفعل - مثل الزومبي الفعلي.

    الكسالى هي في الأساس بقايا العمليات الميتة التي لم يتم تنظيفها بشكل صحيح. البرنامج الذي يخلق عمليات الزومبي ليس مبرمجًا بشكل صحيح - لا يُفترض أن تسمح البرامج بإجراء عمليات الزومبي.

    مصدر الصورة: دانييل هوليستر على موقع Flickr (تم إعادة مزجها)

    ما هي عملية الكسول?

    لفهم ما هي عملية الزومبي وما الذي يجعل عمليات الزومبي تظهر ، عليك أن تفهم قليلاً عن كيفية عمل العمليات على نظام التشغيل Linux.

    عندما تموت عملية على نظام التشغيل Linux ، لن تتم إزالتها بالكامل من الذاكرة - يظل واصف العملية في الذاكرة (لا يأخذ واصف العملية سوى مقدارًا ضئيلاً من الذاكرة). تصبح حالة العملية EXIT_ZOMBIE ويتم إعلام ولي أمر العملية بأن عملية طفلتها قد ماتت بإشارة SIGCHLD. ومن ثم يفترض أن تقوم العملية الرئيسية بتنفيذ استدعاء النظام (wait) لقراءة حالة خروج العملية الميتة وغيرها من المعلومات. هذا يسمح لعملية الأم للحصول على معلومات من عملية ميت. بعد استدعاء () ، تتم إزالة عملية zombie بالكامل من الذاكرة.

    هذا يحدث عادة بسرعة كبيرة ، لذلك لن ترى عمليات الزومبي تتراكم على نظامك. ومع ذلك ، إذا لم تتم برمجة عملية الآباء بشكل صحيح ولا تستدعي الانتظار () ، فسيتمسكت أطفال الزومبي به في الذاكرة حتى يتم تنظيفهم.

    أدوات مثل GNOME System Monitor و أعلى القيادة ، و ملاحظة عرض القيادة غيبوبة العمليات.

    مخاطر عمليات الزومبي

    لا تستخدم عمليات Zombie لأعلى أي موارد النظام. (في الواقع ، يستخدم كل واحد كمية صغيرة جدًا من ذاكرة النظام لتخزين واصف العملية الخاصة به.) ومع ذلك ، تحتفظ كل عملية zombie بمعرّف العملية (PID). تحتوي أنظمة Linux على عدد محدد من معرفات العملية - 32767 بشكل افتراضي على أنظمة 32 بت. إذا كانت الكائنات الزومبية تتراكم بمعدل سريع جدًا - على سبيل المثال ، إذا كان برنامج الخادم المبرمج بشكل غير صحيح ينشئ عمليات زومبي تحت الحمل - فسيتم في نهاية الأمر تخصيص مجموعة كاملة من أجهزة PID المتاحة لعمليات الزومبي ، مما يمنع العمليات الأخرى من الإطلاق.

    ومع ذلك ، فإن بعض العمليات الزومبي التسكع لا توجد مشكلة - على الرغم من أنها تشير إلى خلل مع عملية الأم على النظام الخاص بك.

    التخلص من عمليات الزومبي

    لا يمكنك قتل عمليات غيبوبة كما يمكنك قتل العمليات العادية مع إشارة SIGKILL - غيبوبة بالفعل عمليات ميت. ضع في اعتبارك أنك لا تحتاج إلى التخلص من عمليات الزومبي ما لم يكن لديك كمية كبيرة على نظامك - بعض الكسالى غير ضارة. ومع ذلك ، هناك عدة طرق يمكنك التخلص من عمليات zombie.

    تتمثل إحدى الطرق في إرسال إشارة SIGCHLD إلى العملية الرئيسية. تشير هذه الإشارة إلى عملية الأصل لتنفيذ استدعاء النظام wait () وتنظيف أطفال zombie الخاصة بهم. أرسل الإشارة مع قتل الأمر ، واستبدال معرف المنتج في الأمر أدناه مع PID لعملية الأم:

    قتل- SIGCHLD PID

    ومع ذلك ، إذا لم تتم برمجة العملية الأصل بشكل صحيح وتجاهل إشارات SIGCHLD ، فلن يساعد ذلك. سيكون عليك قتل أو إغلاق عملية الوالد الزومبي. عندما تنتهي العملية التي خلقت الزومبي ، يرث init عمليات الزومبي ويصبح الوالد الجديد. (init هي العملية الأولى التي بدأت في Linux عند التمهيد ويتم تعيين PID 1.) تنفذ init بشكل دوري استدعاء نظام الانتظار () لتنظيف أطفال الزومبي ، لذا سيقوم init بعمل قصير من كائنات الزومبي. يمكنك إعادة تشغيل العملية الرئيسية بعد إغلاقه.

    إذا استمرت عملية الأصل في إنشاء كائنات الزومبي ، يجب أن يتم إصلاحها بحيث تستدعي الانتظار () بشكل صحيح لتجنيب أطفال الزومبي. قم بتقديم تقرير خطأ إذا استمر برنامج على نظامك في إنشاء كائنات الزومبي.