Latest web development tutorials

gestione dei processi Perl

Perl è possibile in diversi modi per creare un processo.

Questo tutorial discutere la gestione di alcuni processi.

  • È possibile utilizzare la variabile speciale$$ o $ PROCESS_IDper ottenere l'ID di processo.

  • % ENV hash tiene il processo padre, che è le variabili d'ambiente di shell a Perl possono modificare queste variabili.

  • exit () è di solito utilizzato per uscire da un processo figlio, il processo figlio esce dal processo principale esce dopo tutto.

  • Tutti gli handle aperti sono DUP nella funzione subroutine () per copiare tutti chiudere tutti gli handle processi non influenzeranno altri processi.


operatore backtick

Utilizzando l'operatore backquote può facilmente eseguire comandi Unix. È possibile inserire alcuni comandi semplici nelle anti-citazioni. esecuzione del comando restituirà i risultati:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

Il programma precedente, i risultati di output sono i seguenti:

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

Sistema function ()

È inoltre possibile utilizzare la funzione disistema () esegue il comando Unix, il comando viene eseguito direttamente in uscita.Per impostazione predefinita, la corrente sarà inviata al di Perl punto STDOUT in cui, tipicamente schermo. È inoltre possibile utilizzare l'operatore di reindirizzamento> output al file specificato:

Il programma precedente, i risultati di output sono i seguenti:

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

Si noti che il comando è necessario includere le variabili di ambiente, come uscita o $ HOME $ PATH, come segue:

#!/usr/bin/perl

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

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

1;

Il programma precedente, i risultati di output sono i seguenti:

/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 () funzione

funzione fork Perl () viene utilizzato per creare un nuovo processo.

Restituisce il bambino nel PID processo genitore, nel processo figlio restituisce 0. In caso di errore (ad esempio, la memoria) si è verificata restituisce undef, e $! È impostato per il messaggio di errore corrispondente.

Può essere utilizzato in combinazione con la forcella e exec. exec processo di esecuzione funzione che si completa dopo la fine del comando tra virgolette.

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

Il programma precedente, i risultati di output sono i seguenti:

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

Se il processo termina, invia un segnale al processo genitore dopo CHLD, diventerà un processo di morti che richiede un'attesa processo padre e waitpid terminato. Naturalmente, è anche possibile impostare $ SIG {CHLD} a 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;

Il programma precedente, i risultati di output sono i seguenti:

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

funzione Kill

Perl uccisione ( 'segnale', ( List Process)) invia un segnale ad un gruppo di processi.segnale è un segnale digitale inviato 9 per uccidere il processo.

Primo sguardo a Linux comunemente utilizzati segnale, vedere l'elenco di seguito:

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

L'esempio seguente elabora 104 e 102 per inviare il segnale SIGINT:

#!/usr/bin/perl

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