20Aug

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

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

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

الائتمان الصورة: دانيال هوليستر على فليكر( ريميكسد)

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

لفهم ما هي عملية غيبوبة وما الذي يسبب عمليات غيبوبة لتظهر، سوف تحتاج إلى فهم قليلا حول كيفية عمل العمليات على لينكس.

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

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

المرافق مثل غنوم مراقبة النظام، أعلى الأمر و بس عرض الأوامر غيبوبة.

مخاطر عمليات الكسول

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

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

التخلص من عمليات الكسول

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

طريقة واحدة هي إرسال إشارة سيغشلد إلى العملية الأصل.هذه الإشارة يخبر العملية الأم لتنفيذ الانتظار() استدعاء النظام وتنظيف الأطفال غيبوبة لها.إرسال الإشارة مع أمر قتل استبدال بيد في الأمر أدناه مع بيد العملية العملية:

قتل -s سيغشلد بيد

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

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