Latest web development tutorials

إدارة عملية بيرل

بيرل يمكنك بطرق مختلفة لخلق عملية.

هذا البرنامج التعليمي سوف يناقش إدارة بعض العمليات.

  • يمكنك استخدام متغير خاص$$ أو $ PROCESS_IDللحصول على معرف العملية.

  • ٪ ENV التجزئة يحمل عملية الأصل، وهو أن المتغيرات قذيفة البيئة في بيرل تعديل هذه المتغيرات.

  • خروج () وعادة ما يستخدم للخروج من عملية طفل، مخارج عملية طفل عملية الرئيسي يخرج بعد كل شيء.

  • كل المؤشرات المفتوحة هي الحزب الاتحادي الديمقراطي في وظيفة روتين () لنسخ كافة إغلاق كافة مقابض والعمليات لا تؤثر على العمليات الأخرى.


مشغل BACKTICK

يمكن استخدام المشغل backquote تنفيذ بسهولة أوامر يونكس. يمكنك إدراج بعض الأوامر البسيطة في معاداة العملات. سوف تنفيذ الأمر بإرجاع النتائج:

#!/usr/bin/perl

@files = `ls -l`;

foreach $file (@files){
   print $file;
}

1;

البرنامج المذكور أعلاه، نتائج الإخراج هي كما يلي:

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
……

نظام وظيفة ()

يمكنك أيضا استخدام وظيفةالنظام () ينفذ الأمر يونكس، يتم تنفيذ الأمر الناتج مباشرة.افتراضيا، سيتم إرسال الحالية إلى نقطة STDOUT بيرل حيث الشاشة عادة. يمكنك أيضا استخدام مشغل توجيه> الإخراج إلى ملف محدد:

البرنامج المذكور أعلاه، نتائج الإخراج هي كما يلي:

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
……

لاحظ أن الأمر تحتاج إلى تضمين متغيرات البيئة مثل الإخراج أو $ منزل $ PATH، على النحو التالي:

#!/usr/bin/perl

$PATH = "我是 Perl 的变量";

system('echo $PATH');  # $PATH 作为 shell 环境变量
system("echo $PATH");  # $PATH 作为 Perl 的变量
system("echo \$PATH"); # 转义 $

1;

البرنامج المذكور أعلاه، نتائج الإخراج هي كما يلي:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
我是 Perl 的变量
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

شوكة وظيفة ()

يتم استخدام الدالة شوكة بيرل () لإنشاء عملية جديدة.

يعود الطفل في PID عملية الأصل، في عملية طفل بإرجاع 0. إذا كان الخطأ (على سبيل المثال، من الذاكرة) حدث عوائد نديف، و$! ومن المقرر أن رسالة الخطأ المقابلة.

ويمكن استخدامها جنبا إلى جنب مع شوكة وإكسيك. عملية تنفيذ وظيفة عمال التنفيذ أن يتم الانتهاء بعد نهاية الأمر بين علامتي اقتباس.

#!/usr/bin/perl

if(!defined($pid = fork())) {
   # fork 发生错误返回 undef
   die "无法创建子进程: $!";
}elsif ($pid == 0) {
   print "通过子进程输出\n";
   exec("date") || die "无法输出日期: $!";
  
} else {
   # 在父进程中
   print "通过父进程输出\n";
   $ret = waitpid($pid, 0);
   print "完成的进程ID: $ret\n";

}

1;

البرنامج المذكور أعلاه، نتائج الإخراج هي كما يلي:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时21分14秒 CST
完成的进程ID: 47117

إذا إنهاء العملية، فإنه يرسل إشارة إلى عملية الأصل بعد CHLD، وسوف تصبح عملية الميتة التي يتطلب انتظار عملية الأصل وwaitpid إنهاؤها. بالطبع، يمكنك أيضا تعيين $ SIG {CHLD} لIGNORG:

#!/usr/bin/perl

local $SIG{CHLD} = "IGNORE";
 
if(!defined($pid = fork())) {
   # fork 发生错误返回 undef
   die "无法创建子进程: $!";
}elsif ($pid == 0) {
   print "通过子进程输出\n";
   exec("date") || die "无法输出日期: $!";
  
} else {
   # 在父进程中
   print "通过父进程输出\n";
   $ret = waitpid($pid, 0);
   print "完成的进程ID: $ret\n";

}

1;

البرنامج المذكور أعلاه، نتائج الإخراج هي كما يلي:

通过父进程输出
通过子进程输出
2016年 6月19日 星期日 22时30分56秒 CST
完成的进程ID: -1

وظيفة قتل

بيرل قتل ( 'إشارة "، ( قائمة العمليات)) يرسل إشارة إلى مجموعة من العمليات.إشارة غير إشارة رقمية ترسل 9 لقتل العملية.

أول نظرة على لينكس تستخدم عادة إشارة، أنظر القائمة أدناه:

信号名          值          标注          解释
————————————————————————————————————————————————————————————
HUP             1           A             检测到挂起
INT               2           A             来自键盘的中断
QUIT            3           A             来自键盘的停止
ILL               4           A             非法指令
ABRT          6           C             失败
FPE             8           C             浮点异常
KILL             9           AF            终端信号
USR1          10          A             用户定义的信号1
SEGV          11          C             非法内存访问
USR2          12          A             用户定义的信号2
PIPE           13          A             写往没有读取者的管道
ALRM         14          A             来自闹钟的定时器信号
TERM         15          A             终端信号
CHLD          17          B             子进程终止
CONT         18          E             如果被停止则继续
STOP         19          DF            停止进程
TSTP          20          D             tty键入的停止命令
TTIN            21          D             对后台进程的tty输入
TTOU          22          D             对后台进程的tty输出

يعالج المثال التالي 104 و 102 لإرسال إشارة SIGINT:

#!/usr/bin/perl

kill('INT', 104, 102);
 
1;