سؤال

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

هل كانت مفيدة؟

المحلول

استخدم معرف العملية (PID) واستطلاع ما إذا كانت العملية لا تزال على قيد الحياة أو ميتة بشكل دوري ؛ وإذا كان ميتاً ، فنبعثه.

ومع ذلك ، إذا كان لديك 10000 عملية ، فمن المحتمل أن تضغط على الحد من عملية نظام التشغيل أولاً. أقترح إعادة تصميم برنامجك حتى لا تحتاج إلى الكثير من العمليات في المقام الأول.

نصائح أخرى

عادةً ما يتم التعامل مع عمليات إعادة التوسيع التي تنخفض من خلال امتلاك برامج قاذفة محددة إلى Exec () البرنامج وانتظار Sigchild للإشارة إلى أن عملية الطفل قد انتهت.

لتطبيقات وقت التمهيد (الخوادم وما إلى ذلك) مثل الشياطين مثل مغرور يمكن أن تفعل هذا لك تلقائيا.

بينما يشير آخرون إلى أن التطبيقات موجودة بالفعل (والتي يجب أن تستخدمها حقًا ما لم يكن لديك سبب واضح لعدم ذلك) سأطرح فكرة عشوائية عن حل مخصص.

إذا كنت تتحكم في الكل N العمليات ثم تجعلها جميعها لديها منطقة ذاكرة مشتركة واحدة N بت كبيرة (لذلك ، 10000 عملية ~ 1 كيلو بايت ، ليست سيئة). عند بدء كل عملية ، أعطها رقمًا ، i, ، تتراوح من 0 إلى ن. كل T ثواني أن كل عملية ستعطى بت i في الذاكرة المشتركة إلى 1. يمكن لعملية مراقبة التحقق من ذلك N البتات 1 كل k*T ثواني ، إعادة ضبطها جميعًا إلى 0 في هذه العملية.

لا يزال هذا o (n) ، وهو ما لن تجنبه ، لكن البدائية كلها سريعة حقًا ويجب أن تصل إلى حد خيط OS.

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

هناك فائدة تسمى مونيت الذي يفعل ما تبحث عنه. ولكن لبعض عمليات مهمة في Linux .. جميع عمليات 10000 مهمة !!!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top