يمكنك إنشاء عمليات بطرق مختلفة في Perl.
سيناقش هذا البرنامج التعليمي بعض طرق إدارة العمليات.
يمكنك الحصول على معرف العملية باستخدام المتغير الخاص $$ أو $PROCESS_ID .
يقوم تجزئة %ENV بتخزين متغيرات البيئة في العملية الأصلية، وهي الصدفة التي يمكن تعديلها في Perl.
عادةً ما يتم استخدام Exit() للخروج من عملية فرعية، حيث يتم الخروج من العملية الرئيسية بعد انتهاء جميع العمليات الفرعية.
سيتم نسخ جميع المقابض المفتوحة بواسطة الدالة dup() في الروتين الفرعي، ولن تؤثر جميع المقابض المغلقة بواسطة العملية على العمليات الأخرى.
يمكن تنفيذ أوامر Unix بسهولة باستخدام عامل التشغيل backtick. يمكنك إدراج بعض الأوامر البسيطة في العلامات الخلفية. بعد تنفيذ الأمر، سيتم إرجاع النتائج:
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
بتنفيذ البرنامج أعلاه، تكون نتائج الإخراج كما يلي:
drwxr-xr-x 3 الجذر الجذر 4096 14 سبتمبر 06:46 9-14drwxr-xr-x 4 الجذر الجذر 4096 13 سبتمبر 07:54 android-rw-r--r-- 1 الجذر الجذر 574 17 سبتمبر 15:16 فهرس .htmdrwxr-xr-x 3 544 401 4096 6 يوليو 16:49 MIME-Lite-3.01-rw-r--r-- 1 جذر الجذر 71 17 سبتمبر 15:16 test.pl……
يمكنك أيضًا استخدام الدالة system() لتنفيذ أوامر Unix. سيؤدي تنفيذ هذا الأمر إلى إخراج النتائج مباشرةً. افتراضيًا، سيتم إرساله إلى المكان الذي يشير إليه Perl's STDOUT حاليًا، وهو عادةً الشاشة. يمكنك أيضًا استخدام عامل إعادة التوجيه > للإخراج إلى ملف محدد:
بتنفيذ البرنامج أعلاه، تكون نتائج الإخراج كما يلي:
drwxr-xr-x 3 الجذر الجذر 4096 14 سبتمبر 06:46 9-14drwxr-xr-x 4 الجذر الجذر 4096 13 سبتمبر 07:54 android-rw-r--r-- 1 الجذر الجذر 574 17 سبتمبر 15:16 فهرس .htmdrwxr-xr-x 3 544 401 4096 6 يوليو 16:49 MIME-Lite-3.01-rw-r--r-- 1 جذر الجذر 71 17 سبتمبر 15:16 test.pl……
يجب عليك الانتباه إلى مخرجات الأمر بما في ذلك متغيرات البيئة مثل $PATH أو $HOME، كما هو موضح أدناه:
بتنفيذ البرنامج أعلاه، تكون نتائج الإخراج كما يلي:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinأنا متغير بيرل /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
يتم استخدام الدالة Perl fork() لإنشاء عملية جديدة.
إرجاع PID للعملية الفرعية في العملية الأصلية، و0 في العملية الفرعية. في حالة حدوث خطأ (على سبيل المثال، ذاكرة غير كافية)، يتم إرجاع undef ويتم تعيين $!
يمكن استخدام الشوكة مع exec. تنتهي العملية بعد أن تقوم الدالة exec بتنفيذ الأمر بين علامتي الاقتباس.
بتنفيذ البرنامج أعلاه، تكون نتائج الإخراج كما يلي:
الإخراج عبر العملية الأصلية الإخراج عبر العملية الفرعية تم إكمال معرف العملية يوم الأحد 19 يونيو 2016 الساعة 22:21:14 معرف العملية CST: 47117
إذا خرجت العملية، فسوف ترسل إشارة CHLD إلى العملية الأصلية وستصبح عملية زومبي. تحتاج العملية الأصلية إلى استخدام الانتظار وwaitpid لإنهائها. بالطبع، يمكنك أيضًا تعيين $SIG{CHLD} على IGNORG:
بتنفيذ البرنامج أعلاه، تكون نتائج الإخراج كما يلي:
الإخراج عبر العملية الأصلية الإخراج عبر العملية الفرعية تم إكمال معرف العملية يوم الأحد، 19 يونيو، 2016 الساعة 22:30:56 معرف العملية CST: -1
يرسل Perl kill('signal', (Process List)) إشارة إلى مجموعة من العمليات. الإشارة هي الإشارة الرقمية المرسلة، 9 هي قتل العملية.
أولاً، دعونا نلقي نظرة على الإشارات الشائعة الاستخدام في نظام Linux، راجع القائمة التالية:
شرح اسم الإشارة وشرح القيمة ————————————————— ——————————— ———HUP 1 A تم اكتشاف تعليق INT 2 A مقاطعة من لوحة المفاتيح QUIT 3 A توقف من لوحة المفاتيح ILL 4 A تعليمات غير قانونية ABRT 6 C فشل FPE 8 C نقطة عائمة غير طبيعية KILL 9 إشارة طرفية للتركيز البؤري التلقائي USR1 10 A إشارة محددة من قبل المستخدم 1SEGV 11 C الوصول غير القانوني إلى الذاكرة USR2 12 A إشارة محددة من قبل المستخدم 2PIPE 13 A الكتابة إلى الأنبوب ALRM بدون قارئ 14 A مصطلح إشارة الموقت من المنبه 15 A إشارة طرفية CHLD 17 B إنهاء العملية التابعة CONT 18 E متابعة STOP إذا توقفت 19 DF أوقف العملية TSTP 20 D اكتب أمر الإيقاف TTIN على tty 21 D اكتب TTOU على tty لعملية الخلفية 22 D إخراج tty إلى عملية الخلفية
يرسل المثال التالي إشارات SIGINT إلى العمليتين 104 و102: