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

من موسوعة حسوب
< Ruby‏ | Kernel
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>fork‎</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف...'
 
ط مراجعة وتدقيق
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 3: سطر 3:
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Kernel]]
[[تصنيف: Ruby Kernel]]
ينشئ التابع عملية فرعية (subprocess). في حال إعطاء كتلة، فستُنفّذ تلك الكتلة في العملية الفرعية، كما أن قيمة الحالة عند الانتهاء ستساوي صفر. وإلا ، فإن استدعاء التابع <code>fork</code> سيقوم بالإعادة مرتين، مرة في العملية الأم (parent, process)، حيث يعيد معرف العملية الفرعية، ومرة في العملية الفرعية، حيث يعيد nil. يمكن للعملية الفرعية الخروج باستخدام <code>Kernel.exit!</code> لتجنب تشغيل دوال <code>at_exit</code>. يجب أن تستخدم العملية الأم <code>Process.wait</code> لجمع حالات إنهاء عملياتها الفرعية، أو تستخدم <code>Process.detach</code> لتسجيل إهمال تلك الحالات؛ خلاف ذلك، قد يُراكم نظام التشغيل عمليات الزومبي (zombie processes).
ينشئ التابع <code>fork</code> عملية فرعية (subprocess). في حال تمرير كتلة، فستُنفّذ تلك الكتلة في العملية الفرعية، كما أن قيمة حالة الخروج عند الانتهاء ستساوي الصفر. خلا ذلك، سيعيد التابع <code>fork</code> مرتين؛ مرةً في العملية الأب (parent process)، حيث يعيد معرف العملية (pid) الفرعية، ومرة في العملية الفرعية، حيث يعيد <code>nil</code>.  
المهمة الفرعية (thread) التي استدعت التابع fork هو المهمة الفرعية الوحيدة في العملية الفرعية التي تم إنشاؤها. لا ينسخ التابع fork المهام الفرعية الأخرى.
 
إذا كان fork غير قابل للاستخدام ، فسيعيد التعبير Process.respond_to؟ (: fork) القيمة false.
يمكن للعملية الفرعية الخروج باستخدام <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).
لاحظ أن fork(2) ليست متوفرة على بعض أنظمة التشغيل مثل Windows و NetBSD 4. لذلك يجب استخدام spawn () بدلاً من fork ().
 
الخيط (thread) الذي استدعى التابع <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/fail|fail]]</code>: في حال استدعاء التابع بدون إعطاء أي وسائط، فسبُطلق الاستثناء في <code>$!</code> أو يطلق <code>RuntimeError</code> إذا كان <code>$!</code> يساوي <code>nil</code>. في حال تمرير وسيط واحد <code>String</code>، فسيطلق <code>RuntimeError</code> مع سلسلة نصية كرسالة. حلا ذلك، يجب أن يكون الوسيط الأول هو اسم صنف <code>Exception</code> (أو كائنًا يعيد كائن من النوع <code>Exception</code> عند إرسال رسالة <code>exception</code>). يحدد الوسيط الاختياري الثانية الرسالة المرتبطة بالاستثناء، أما الوسيط الثالث فهو مصفوفة تضم معلومات الاستدعاء. تُضبط الاستثناءات بواسطة الجملة <code>rescue</code> من كتل <code>begin...end</code>.
*التابع <code>[[Ruby/Kernel/spawn|spawn]]</code>: ينفذ أمرًا محددًا، ويعيد معرّفه.
* التابع <code>[[Ruby/Kernel/format|format]]</code>: يعيد التابع السلسلة النصية الناتجة من تطبيق format_string على أي وسائط إضافية.  داخل السلسلة النصية format_string، ستُنسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences).
 
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-fork قسم التابع fork‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]
*[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: ينفذ أمرًا محددًا، ويعيد معرّفه.

مصادر