تعلم قيادة لينكس - انتظر

اسم

انتظر ، انتظر - انتظر إنهاء العملية

ملخص

#include
#include

pid_t انتظر (الباحث * الحالة ) ؛
pid_t waitpid (pid_t pid ، int * status ، int options

وصف

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

تقوم وظيفة waitpid بتعليق تنفيذ العملية الحالية حتى خروج الطفل كما هو محدد بواسطة الوسيطة pid ، أو حتى يتم تسليم إشارة يكون أداؤها هو إنهاء العملية الحالية أو استدعاء وظيفة التعامل مع الإشارة. إذا كان الطفل قد طلب من قبل pid بالفعل قبل وقت المكالمة (ما يسمى بالعملية "zombie") ، ستعود الدالة على الفور. يتم تحرير أي موارد النظام المستخدمة من قبل الطفل.

يمكن أن تكون قيمة pid واحدة من:

<-1

مما يعني الانتظار لأي عملية تابعة تكون معرف مجموعة العمليات الخاصة بها مساوية للقيمة المطلقة لـ pid .

-1

مما يعني الانتظار لأي عملية طفل ؛ هذا هو نفس السلوك الذي ينتظر المعروضات.

0

مما يعني انتظار أي عملية تابعة تكون معرف مجموعة العمليات مساوٍ لهوية عملية الاستدعاء.

> 0

مما يعني انتظار الطفل الذي يكون معرف العملية مساوياً لقيمة pid .

قيمة الخيارات هي OR من صفر أو أكثر من الثوابت التالية:

WNOHANG

مما يعني العودة فورًا إذا لم يخرج أي طفل.

WUNTRACED

وهو ما يعني أيضًا العودة للأطفال الذين يتم إيقافهم والذين لم يتم الإبلاغ عن وضعهم.

(للاطلاع على خيارات Linux-only ، انظر أدناه.)

إذا كانت الحالة غير فارغة ، فانتظر أو انتظر تخزين معلومات الحالة في الموقع المشار إليه بالحالة .

يمكن تقييم هذه الحالة مع وحدات الماكرو التالية (تأخذ هذه وحدات الماكرو المخزن المؤقت الأساسي ( int ) كوسيطة --- لا مؤشر إلى المخزن المؤقت!):

WIFEXITED ( الحالة )

غير صفرية إذا خرج الطفل بشكل طبيعي.

WEXITSTATUS ( الحالة )

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

WIFSIGNALED ( الحالة )

يعود الحقيقي إذا خرجت عملية الطفل بسبب إشارة التي لم يتم القبض عليه.

WTERMSIG ( الحالة )

يعيد رقم الإشارة التي تسببت في إنهاء عملية الطفل. يمكن تقييم هذا الماكرو فقط في حالة إرجاع WIFSIGNALED بدون صفر.

WIFSTOPPED ( الحالة )

يعود الحقيقي إذا تم إيقاف عملية الطفل الذي تسبب في العودة حاليا ؛ هذا ممكن فقط إذا تمت المكالمة باستخدام WUNTRACED .

WSTOPSIG ( الحالة )

يعيد رقم الإشارة التي تسببت في توقف الطفل. يمكن تقييم هذا الماكرو فقط في حالة إرجاع WIFSTOPPED بدون صفر.

بعض إصدارات Unix (مثل Linux و Solaris ، ولكن ليس AIX و SunOS) تحدد أيضًا الماكرو WCOREDUMP ( الحالة ) لاختبار ما إذا كانت عملية معالجة الطفل الأساسية ملقاة. استخدم هذا فقط في #ifdef WCOREDUMP ... #endif.

قيمة الإرجاع

معرف العملية الخاص بالطفل الذي خرج ، أو صفر إذا تم استخدام WNOHANG ولم يتوفر أي طفل ، أو -1 على خطأ (في هذه الحالة يتم تعيين errno إلى قيمة مناسبة).

أخطاء

ECHILD

إذا كانت العملية المحددة في لا يوجد pid أو ليس طفلاً لعملية الاستدعاء. (يمكن أن يحدث هذا للطفل الخاص إذا تم تعيين الإجراء الخاص بـ SIGCHLD على SIG_IGN. راجع أيضًا قسم LINUX NOTES حول مؤشرات الترابط.)

EINVAL

إذا كانت وسيطة الخيارات غير صالحة.

EINTR

إذا لم يتم ضبط WNOHANG وتم التقاط إشارة غير محظورة أو SIGCHLD .