كيفية معرفة وضع عملية الأطفال واستخدام الموارد على النوافذ؟

StackOverflow https://stackoverflow.com/questions/870253

سؤال

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

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

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

في المصطلحات يونكس، أريد أن شوكة، إكسيك، waitpid وgetrusage. وشوكة + setrusage + إكسيك يمكن أن تحد من استخدام الموارد الطفل. ولكن لا أعرف كيف نفعل هذه على منصة ويندوز.

تجدر الإشارة لي اسم API ويندوز. ويمكنني أن دراسة بقية نفسي.

ويفضل عدم استخدام مكتبة بخلاف API ويندوز. تفضل أنها ليست الأم يعمل المصحح وربط لعملية طفل. فقط لا تفضل ذلك، ولكن لا تزال مقبولة.

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

المحلول

عند استدعاء CreateProcess، فإنها ترجع مؤشر إلى العملية.

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

BOOL IsProcessRunning(HANDLE process)
{
    return WaitForSingleObject(process, 0) != WAIT_OBJECT_0;
}

void WaitForProcessToExit(HANDLE process)
{
    WaitForSingleObject(process, INFINITE);
}

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

لاستخدام الموارد، يمكنك الاتصال GetProcessTimes للحصول على إجمالي وقت وحدة المعالجة المركزية، GetGuiResources للحصول على GDI التعامل مع المعلومات، GetProcessMemoryInfo للحصول على احصائيات الذاكرة، وGetProcessIoCounters للحصول على معلومات IO.

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