التابع Process.wait في روبي

من موسوعة حسوب
< Ruby‏ | Process
مراجعة 08:25، 6 يناير 2019 بواسطة جميل-بيلوني (نقاش | مساهمات) (إنشاء الصفحة.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

ينتظر التابع wait خروج العملية الابن ثم يعيد مُعرِّفها ويضبط ?$ إلى قيمة الكائن Process::Status الذي يحوي معلومات حول تلك العملية. العملية التي ينتظرها التابع wait يعتمد على مُعرِّف العملية pid المُمرَّر إليه.

يطلق استدعاء هذا التابع الاستثناء SystemCallError إن لم يكن هنالك أية عمليات أبناء.

هذا التابع غير متاح على جميع المنصات.

البنية العامة

wait()  integer click to toggle source
wait(pid=-1, flags=0)  integer
waitpid(pid=-1, flags=0)  integer

المعاملات

pid

مُعرِّف العملية المراد انتظارها. تتراوح القيم التي تأخذها ضمن المجالات التالية:

  • أكبر من الصفر: ينتظر التابع العملية الابن التي مُعرَّفها هو القيمة pid المعطاة نفسه.
  • القيمة 0: ينتظر التابع أية عملية ابن مُعرِّف المجموعة المالكة لها يساوي مُعرِّف المجموعة المالكة للعملية المستدعية.
  • القيمة 1-: ينتظر التابع أية عملية ابن (القيمة الافتراضية إن لم يُعطَ المعامل pid).
  • أصغر من 1-: ينتظر التابع أية عملية ابن مُعرِّف المجموعة المالكة لها يساوي القيمة المطلقة للمعامل pid المعطى.

flags

يمكن أن يكون قيمة منطقية أو قيمة الراية Process::WNOHANG (لا يُحجَز إن لم يكن هنالك عملية ابن متاحة) أو الراية Process::WUNTRACED (يعيد العمليات الأبناء المتوقفة التي لم يُبلَّغ عنها). ليست جميع الرايات مدعومة على كل المنصات باستثناء أنَّ القيمة 0 (القيمة الافتراضية) لهذا المعامل تعمل على جميع المنصات.

القيم المعادة

يعاد عدد صحيح يمثِّل مُعرِّف العملية الابن بعد خروجها.

أمثلة

مثال على استعمال التابع wait:

include Process
fork { exit 99 }                 #=> 27429
wait                             #=> 27429
$?.exitstatus                    #=> 99

pid = fork { sleep 3 }           #=> 27440
Time.now                         #=> 2008-03-08 19:56:16 +0900
waitpid(pid, Process::WNOHANG)   #=> nil
Time.now                         #=> 2008-03-08 19:56:16 +0900
waitpid(pid, 0)                  #=> 27440
Time.now                         #=> 2008-03-08 19:56:19 +0900

انظر أيضًا

  • التابع last_status: يعيد حالة آخر عملية ابن نفِّذَت في الخيط الحالي.
  • التابع wait2: ينتظر خروج العملية الابن ثم يعيد مصفوفة تحوي مُعرِّف وحالة الخروج (كائنًا من النوع Process::Status) تلك العملية.
  • التابع waitall: ينتظر جميع العمليات الأبناء للعملية الحالية ثم يعيد مصفوفة تحوي الأزواج مُعرِّف_العملية/الحالة (pid/status).
  • التابع waitpid: ينتظر خروج العملية الابن ثم يعيد مُعرِّفها ويضبط ?$ إلى قيمة الكائن Process::Status الذي يحوي معلومات حول تلك العملية. 

مصادر