سؤال

كيف يمكنني الحصول على معلومات حول حالة العملية (أي؟إذا كان زومبي) باستخدام C تحت Linux؟

بعد قراءة الإجابات حتى الآن أريد تضييق نطاق سؤالي إلى حد ما:أفضل حل C النقي.بعد قراءة مصدر ps (الذي يقرأ /proc/) اعتقدت أنه يجب أن تكون هناك طريقة أفضل وسألت هنا :)

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

المحلول

وأنت تريد معرفة المزيد عن التفاعل مع / بروك / "الزائف-نظام الملفات" عن طريق المكالمات المكتبة القياسية نموذجي C. يتم تضمين مع أي توزيعة لينكس الوثائق اللازمة للبدء وهو جوجل بحث بسيط بعيدا.

و(الآن عليك أن تعرف ما يجب البحث عنه. أنا أعلم أن هذا عادة معظم التحدي!)

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

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

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

وهكذا كل فرعية من الناحية الفنية الكسالى لفترة قصيرة جدا على الأقل. انها ليست بطبيعتها حالة سيئة للبرنامج ليكون في.

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

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

وتحرير: تغيير سؤال حول لي! لا، ليس هناك طريقة أبسط من كيفية ملاحظة أنه لا. إذا كان هناك، لكان قد تم دمجها ملاحظة منذ وقت طويل. الملفات / إجراءات هي أن يكون للجميع في نهاية كل مصدر للمعلومات عن دولة نواة ل. :)

نصائح أخرى

أنا أعرف طريقتين فقط:

  • تحليل الناتج من ps يأمر
  • قراءة الملفات في /proc/PID، حيث PID هو معرف العملية (هذا ما ps يفعل داخليا)

تريد تشغيل العمليات على جهازك ثم استخدامها

$ ملاحظة aux

ملاحظة يعرض معلومات حول مجموعة مختارة من العمليات النشطة.إذا كنت تريد تحديثًا متكررًا للاختيار والمعلومات المعروضة، فاستخدم قمة بدلاً من.

هنا :

Use this command to display all of your zombie processes:

ps aux | awk '{ print $8 " " $2 }' | grep -w Z

ويمكن تحليل هذه بسهولة باستخدام C.

ونظام الملفات الزائفة / إجراءات وتصف بنية البيانات الداخلية نواة ويعطي لك الفرصة لتغيير بعض القيم مباشرة. حالة عملية معينة الحصول على ويمكن تنفيذها بسهولة مع I / O وظائف C. الملف المناسب للتحليل هو: <م> / إجراءات / {PID} / وضع

والقيادة أدناه يمكن استخدامها للحصول على العمليات في ولاية الكسول.

for proc in $(echo /proc/[0-9]*);do if [[ $(sed -n '/^State:\tZ/p' ${proc}/status 2>/dev/null) ]];then basename $proc;fi;done
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top