وظيفة بيرل فورك

Wzyft Byrl Fwrk



إن fork() هي وظيفة مضمنة في Perl تُستخدم لإنشاء عملية فرعية لأي عملية قيد التشغيل وتعمل على أنظمة التشغيل Linux فقط. يقوم بإنشاء نسخة منفصلة من عملية التنفيذ ويقوم بتشغيل كلتا العمليتين بالتوازي. لذلك، إذا تم تحديث متغير العملية الأم، فلن يكون له أي تأثير على نفس متغير العملية الفرعية أو العكس. يتم عرض استخدامات الدالة fork() في لغة Perl في هذا البرنامج التعليمي.

بناء الجملة:

يتم تقديم بناء جملة الدالة fork() فيما يلي. تقوم بإرجاع قيمة رقمية أو 'undef'. إذا كانت وظيفة fork() تعمل بنجاح، فسيتم إرجاع معرف عملية معين أو إرجاع 0 للعملية الفرعية. تقوم بإرجاع 'undef' إذا كانت وظيفة fork() غير ناجحة.







بطاقة تعريف أو شوكة غير محددة ( ) ;

مثال 1: الاستخدام البسيط لوظيفة Fork()

قم بإنشاء ملف Perl باستخدام البرنامج النصي التالي الذي يقوم بإنشاء عملية فرعية من العملية الحالية باستخدام وظيفة fork(). تتم طباعة معرف العملية بعد تنفيذ وظيفة fork(). يتم تخزين متغيرات العمليات الأصلية والتابعة في مواقع مختلفة في الذاكرة. لذلك، إذا تم تغيير قيمة المتغير في العملية الأصلية، فلن يحدث أي تغيير لنفس المتغير في العملية الفرعية أو العكس. في هذا البرنامج النصي، يتم تغيير متغير العملية الأصلية. ثم تتم طباعة متغيرات كل من العمليات الأصلية والتابعة.



#!/usr/bin/Perl

استخدام صارم ;
يستخدم تحذيرات ;
استخدم 5.34.0 ;

# أعلن عن متغير
بلدي $فار = 'شوكة الاختبار' ;
# فورك العملية الحالية
$process_id الخاص بي = شوكة ( ) ;

# التحقق من معرف العملية
لو ( $process_id < 0 )
{
يقول 'غير قادر على تفرع العملية.' ;
}
elsif ( $process_id == 0 )
{
يقول 'عملية الطفل:' ;
# اطبع قيمة متغير العملية الفرعية
يقول 'قيمة المتغير: $var' ;
}
آخر
{
يقول 'العملية الأصلية: $process_id' ;
#تحديث قيمة المتغير
$فار = 'اختبار الشوكة 2' ;
# اطبع قيمة متغير العملية الأصلية
يقول 'قيمة المتغير: $var' ;
}

انتاج:



يظهر الإخراج التالي بعد تنفيذ البرنامج النصي. يتم تعديل متغير العملية الأصلية بقيمة 'Test Fork 2' لكن متغير العملية الفرعية يظل دون تغيير. لذا فإن قيمة متغير العملية الفرعية هي 'Test Fork'. كانت تلك القيمة بعد الشوكة:





  ص1

المثال 2: استخدام الدالتين Fork() وWait()

قم بإنشاء ملف Perl باستخدام البرنامج النصي التالي الذي يوضح استخدام وظيفة fork() مع وظيفة wait(). تم الإعلان عن ثلاثة متغيرات في بداية البرنامج النصي. يتم استخدام وظيفة السكون () داخل كتلة العملية الأصلية لمدة ثانية واحدة وداخل العملية الفرعية لمدة ثانيتين. يتم حساب مجموع المتغيرين وتخزينه على متغير آخر داخل كتلة العملية الأصلية. يتم ضرب قيم المتغيرين وتخزينها على متغير آخر داخل العملية الفرعية. يتم استخدام وظيفة الانتظار () في نهاية البرنامج النصي لانتظار إكمال مهمة عملية واحدة قبل بدء مهمة عملية أخرى. إذا تم استخدام الدالة fork() عدة مرات في البرنامج النصي وتم تشغيل العديد من العمليات في نفس الوقت، فقد تنشأ حالة توقف تام. يمكن حل المشكلة باستخدام وظيفة الانتظار ().



#!/usr/bin/Perl

استخدام صارم ;
يستخدم تحذيرات ;
استخدم 5.34.0 ;

#تهيئة المتغيرات
بلدي $n1 = 10 ;
بلدي $n2 = 25 ;
نتيجة $ الخاصة بي = 0 ;

# فورك العملية الحالية
$process_id الخاص بي = شوكة ( ) ;

# التحقق من معرف العملية
لو ( $process_id == 0 )
{
#احسب ضرب الأعداد
يقول 'العملية الفرعية: $$' ;
نتيجة $ = $n1 * $n2 ;
يقول 'انتظر ثانيتين.. ' ;
ينام 2 ;
يقول 'ضرب $n1 و$n2 هو نتيجة $.' ;
}
elsif ( $process_id > 0 )
{
#احسب مجموع الأعداد
يقول 'العملية الأصلية: $$' ;
نتيجة $ = $n1 + $n2 ;
يقول 'انتظر ثانية واحدة... ' ;
ينام 1 ;
يقول 'مجموع $n1 و $n2 هو $result.' ;
}
آخر
{
يقول 'غير قادر على تفرع العملية.' ;
}

# انتظر لإكمال مهمة العملية
انتظر ( ) ;

انتاج:

يظهر الإخراج التالي بعد تنفيذ البرنامج النصي. وفقًا للإخراج، تم إنشاء العملية الفرعية بنجاح، وتمت طباعة معرف العملية للعملية الأصلية، وتم إيقاف البرنامج النصي مؤقتًا لمدة ثانية واحدة لإكمال المهمة. بعد ذلك، تتم طباعة معرف العملية للعملية الفرعية ويتم إيقاف البرنامج النصي مؤقتًا لمدة ثانيتين لإكمال المهمة. تتم طباعة مخرجات كل من العمليات الأصلية والتابعة لاحقًا:

  p2

خاتمة

الغرض من استخدام وظيفة Perl fork() موضح في هذا البرنامج التعليمي عن طريق إنشاء عملية فرعية وتنفيذ أنواع مختلفة من المهام داخل كتلة العمليات الأصلية والتابعة.