الفرق بين المراجعتين لصفحة: «Ruby/Process/detach»

من موسوعة حسوب
< Ruby‏ | Process
إنشاء الصفحة.
 
 
سطر 37: سطر 37:
*التابع <code>[[Ruby/Process/daemon|daemon]]</code>: يفصل العملية من طرفية التحكم ويُشغِّلها في الخلفية كجوهرة نظام (system daemon).
*التابع <code>[[Ruby/Process/daemon|daemon]]</code>: يفصل العملية من طرفية التحكم ويُشغِّلها في الخلفية كجوهرة نظام (system daemon).
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Process.html#method-c-detach قسم التابع detach في الصنف Enumerable في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Process.html#method-c-detach قسم التابع detach في الصنف Process في توثيق روبي الرسمي.]
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Process]]
[[تصنيف: Ruby Process]]

المراجعة الحالية بتاريخ 11:31، 1 يناير 2019

تحتفظ بعض أنظمة التشغيل بحالة العمليات الفرعية التي أُنهيَت حتى تجمع العملية الأب تلك الحالة (باستعمال أنواع مختلفة من wait()‎). إن لم تجمع العملية الأب هذه الحالة على الإطلاق، تبقى العملية الابن متراكمة ضمن العمليات الميتة (zombie process). يمنع التابع Process::detach هذا السلوك عبر ضبط خيط منفصل من روبي وظيفته الوحيدة هي جمع الحالة لمعرف العملية (pid) عندما تُنهَى. استعمل التابع detach فقط عندما لا تنوي انتظار العملية الابن لكي تُنهَى بشكل صريح.

يعيد الخيط المُنتَظِر (waiting thread) حالة الخروج للعملية المنفصلة عندما تُنهَى، لذا يمكنك استعمال Thread.join لمعرفة النتيجة. إن لم يكن مُعرِّف العملية pid معرِّف عملية ابن صالح، فسيُعيد الخيط القيمة nil مباشرةً.

يملك الخيط المنتظر التابع pid الذي يعيد قيمة مُعرِّف العملية.

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

detach(pid)  thread

المعاملات

pid

مُعرِّف العملية المراد تطبيق العملية عليها.

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

يعاد خيط يمثِّل الخيط المُنتَظِر (waiting thread) الذي يعيد حالة الخروج للعملية المنفصلة عندما تُنهَى.

أمثلة

في المثال التالي، لا نجمع حالة العملية الابن الأولى، لذا ستظهر في عداد العمليات الموتى:

p1 = fork { sleep 0.1 }
p2 = fork { sleep 0.2 }
Process.waitpid(p2)
sleep 2
system("ps -ho pid,state -p #{p1}")

تنفيذ هذا المثال يُنتِج:

27389 Z

أمَّا في المثال التالي، يُستعمَل التابع detach لجمع حالة العملية تلقائيًّا:

p1 = fork { sleep 0.1 }
p2 = fork { sleep 0.2 }
Process.detach(p1)
Process.waitpid(p2)
sleep 2
system("ps -ho pid,state -p #{p1}")

لا ينتج عن تنفيذ هذا المثال أية مخرجات.

انظر أيضًا

  • التابع clock_gettime: يعيد الوقت المعادة عبر الدالة clock_gettime()‎ التي تخص POSIX.
  • التابع daemon: يفصل العملية من طرفية التحكم ويُشغِّلها في الخلفية كجوهرة نظام (system daemon).

مصادر