الفرق بين المراجعتين لصفحة: «Ruby/Kernel/fork»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Kernel]] | [[تصنيف: Ruby Kernel]] | ||
ينشئ التابع <code>fork</code> | ينشئ التابع <code>fork</code> عملية فرعية (subprocess). في حال تمرير كتلة، فستُنفّذ تلك الكتلة في العملية الفرعية، كما أن قيمة حالة الخروج عند الانتهاء ستساوي الصفر. خلا ذلك، سيعيد التابع <code>fork</code> مرتين؛ مرةً في العملية الأب (parent process)، حيث يعيد معرف العملية (pid) الفرعية، ومرة في العملية الفرعية، حيث يعيد <code>nil</code>. | ||
يمكن للعملية الفرعية الخروج باستخدام <code>[[Ruby/Kernel/exit-21|exit!]]</code> لتجنب تشغيل دوال <code>[[Ruby/Kernel/at exit|at_exit]]</code>. يجب أن تستخدم العملية | يمكن للعملية الفرعية الخروج باستخدام <code>[[Ruby/Kernel/exit-21|exit!]]</code> لتجنب تشغيل دوال التابع <code>[[Ruby/Kernel/at exit|at_exit]]</code>. يجب أن تستخدم العملية الأب التابع <code>Process.wait</code> لتجميع حالات إنهاء عملياتها الفرعية، أو تستخدم <code>Process.detach</code> لتسجيل إهمال تلك الحالات؛ خلاف ذلك، قد يُراكم نظام التشغيل عمليات ميتة (zombie processes). | ||
الخيط (thread) الذي استدعى التابع <code>fork</code> هو الخيط الوحيد في العملية الفرعية التي تم إنشاؤها. لا ينسخ التابع <code>fork</code> الخيوط الأخرى. | |||
إذا كان <code>fork</code> غير قابل | إذا كان <code>fork</code> غير قابل للاستخدام، فسيعيد الاستدعاء <code>Process.respond_to?(:fork)</code> القيمة <code>false</code>. | ||
لاحظ | لاحظ أنَّ <code>fork(2)</code> ليست متوفرة على بعض أنظمة التشغيل مثل Windows و NetBSD 4. لذلك يجب استخدام <code>[[Ruby/Kernel/spawn|spawn()]]</code> بدلاً من <code>fork()</code>. | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">fork [{ block }]→ integer or nil | <syntaxhighlight lang="ruby">fork [{ block }]→ integer or nil | ||
fork [{ block }]→ integer or nil</syntaxhighlight> | fork [{ block }]→ integer or nil</syntaxhighlight> | ||
==القيمة | ==القيمة المعادة== | ||
يعاد مُعرِّف العملية (pid) الفرعية، أو تعاد القيمة <code>nil</code>. | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/Kernel/spawn|spawn]]</code>: ينفذ أمرًا | *التابع <code>[[Ruby/Kernel/spawn|spawn]]</code>: ينفذ أمرًا محددًا، ويعيد معرّفه. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-fork قسم | *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-fork قسم التابع fork في الصنف Kernel في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 12:52، 15 نوفمبر 2018
ينشئ التابع fork
عملية فرعية (subprocess). في حال تمرير كتلة، فستُنفّذ تلك الكتلة في العملية الفرعية، كما أن قيمة حالة الخروج عند الانتهاء ستساوي الصفر. خلا ذلك، سيعيد التابع fork
مرتين؛ مرةً في العملية الأب (parent process)، حيث يعيد معرف العملية (pid) الفرعية، ومرة في العملية الفرعية، حيث يعيد nil
.
يمكن للعملية الفرعية الخروج باستخدام exit!
لتجنب تشغيل دوال التابع at_exit
. يجب أن تستخدم العملية الأب التابع Process.wait
لتجميع حالات إنهاء عملياتها الفرعية، أو تستخدم Process.detach
لتسجيل إهمال تلك الحالات؛ خلاف ذلك، قد يُراكم نظام التشغيل عمليات ميتة (zombie processes).
الخيط (thread) الذي استدعى التابع fork
هو الخيط الوحيد في العملية الفرعية التي تم إنشاؤها. لا ينسخ التابع fork
الخيوط الأخرى.
إذا كان fork
غير قابل للاستخدام، فسيعيد الاستدعاء Process.respond_to?(:fork)
القيمة false
.
لاحظ أنَّ fork(2)
ليست متوفرة على بعض أنظمة التشغيل مثل Windows و NetBSD 4. لذلك يجب استخدام spawn()
بدلاً من fork()
.
البنية العامة
fork [{ block }]→ integer or nil
fork [{ block }]→ integer or nil
القيمة المعادة
يعاد مُعرِّف العملية (pid) الفرعية، أو تعاد القيمة nil
.
انظر أيضا
- التابع
spawn
: ينفذ أمرًا محددًا، ويعيد معرّفه.