ما هو الفرق بين الانتظار و waitpid في لينكس؟


الاجابه 1:

مكالمات النظام هذه ليست خاصة بنظام Linux ؛ يجب أن تكون دلالاتها هي نفسها في أي تطبيق لـ Unix.

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

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

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

فيما يلي دليل أكثر عمومية (غير خاص بنظام Linux) إلى مكالمة نظام wait (): Wait System Call in C - GeeksforGeeks

بقدر ما أعرف ، من الممكن الانتظار فقط () لعمليات طفلك الخاصة. من المؤكد أنك ستحصل على قيمة إرجاع لـ -EINVAL (غير صالحة) إذا اتصلت بـ waitpid () مع بعض PID وهذا ليس أحد أطفالك المباشرين. لاحظ أيضًا أن استدعاء الانتظار () ومتغيراته من مسار تنفيذ التعليمات البرمجية الرئيسية الخاصة بك يمكن أن تعقد بواسطة أي معالجات قمت بتسجيلها لمعالجة SIGCHLD.

أيضًا ، فإن دلالات استدعاء waitpid () على شوكة العملية () d في إطار SIGCHLD المضبوط على SIG_IGN معقدة ومعقدة ، إلى جانب مواصفات Posix ، بين Linux 2.4 و 2.6. اقرأ الصفحة الشخصية للحصول على تفاصيل قبيحة ، واكتب رمز الاختبار للتأكد من أن توقعاتك تتوافق مع دلالات متطلباتك.