Latest web development tutorials

manajemen proses perl

Perl Anda bisa dalam cara yang berbeda untuk menciptakan suatu proses.

Tutorial ini akan membahas pengelolaan beberapa proses.

  • Anda dapat menggunakan variabel khusus$$ atau $ PROCESS_IDuntuk mendapatkan ID proses.

  • % ENV hash memegang proses induk, yang merupakan variabel lingkungan shell di Perl dapat memodifikasi variabel tersebut.

  • exit () biasanya digunakan untuk keluar proses anak, proses anak keluar proses utama keluar setelah semua.

  • Semua menangani terbuka adalah dup dalam fungsi subroutine () untuk menyalin semua menutup semua menangani proses tidak akan mempengaruhi proses lain.


Operator backtick

Menggunakan operator backquote dapat dengan mudah menjalankan perintah Unix. Anda dapat memasukkan beberapa perintah sederhana dalam anti-tanda kutip. perintah eksekusi akan menghasilkan:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

Di atas program, hasil output adalah sebagai berikut:

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
……

fungsi system ()

Anda juga dapat menggunakan fungsisystem () mengeksekusi perintah Unix, perintah dijalankan langsung output.Secara default, saat ini akan dikirim ke titik STDOUT Perl mana, biasanya layar. Anda juga dapat menggunakan operator redirection> output ke file yang ditentukan:

Di atas program, hasil output adalah sebagai berikut:

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
……

Perhatikan bahwa perintah Anda perlu menyertakan variabel lingkungan seperti output atau $ HOME $ PATH, sebagai berikut:

#!/usr/bin/perl

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

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

1;

Di atas program, hasil output adalah sebagai berikut:

/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

fork () function

Perl fork () adalah fungsi yang digunakan untuk membuat proses baru.

Mengembalikan anak dalam PID proses induk, dalam proses anak mengembalikan 0. Jika kesalahan (misalnya, dari memori) terjadi kembali undef, dan $! Diatur untuk pesan kesalahan yang sesuai.

Hal ini dapat digunakan dalam hubungannya dengan garpu dan exec. Proses eksekusi fungsi exec yang selesai setelah akhir perintah dalam tanda kutip.

#!/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;

Di atas program, hasil output adalah sebagai berikut:

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

Jika proses keluar, ia akan mengirimkan sinyal ke proses induk setelah chld, itu akan menjadi proses mati yang membutuhkan proses induk menunggu dan waitpid dihentikan. Tentu saja, Anda juga dapat mengatur $ SIG {chld} ke 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;

Di atas program, hasil output adalah sebagai berikut:

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

fungsi membunuh

Perl kill ( 'sinyal', ( Process Daftar)) mengirimkan sinyal kepada sekelompok proses.sinyal adalah sinyal digital yang dikirim 9 untuk membunuh proses.

Pertama melihat linux yang umum digunakan sinyal, lihat daftar di bawah:

信号名          值          标注          解释
————————————————————————————————————————————————————————————
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输出

Contoh berikut memproses 104 dan 102 untuk mengirim sinyal SIGINT:

#!/usr/bin/perl

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