Latest web development tutorials

gestión de procesos de Perl

Perl se puede en diferentes formas de crear un proceso.

En este tutorial se discutirá la gestión de algunos procesos.

  • Puede utilizar la variable especial$ $$oPROCESS_IDpara obtener el ID del proceso.

  • picadillo% ENV sostiene que el proceso padre, que es la cáscara de las variables de entorno en Perl puede modificar estas variables.

  • exit () se utiliza generalmente para salir de un proceso hijo, el proceso hijo sale del proceso principal sale después de todo.

  • Todos los identificadores abiertos son DUP en la función de subrutina () para copiar todos los procesos de cerrar todos los identificadores no afectarán a otros procesos.


operador de comilla invertida

Usando el operador comilla inversa puede ejecutar fácilmente los comandos de Unix. Puede insertar algunos comandos simples en los anti-comillas. Ejecución de comandos le proporcione resultados:

#!/usr/bin/perl

@files = `ls -l`;

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

1;

El programa anterior, los resultados de salida son los siguientes:

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 de la función ()

También puede utilizar la función delsistema () ejecuta el comando Unix, el comando se ejecuta directamente la salida.De forma predeterminada, la corriente será enviado al punto de salida estándar de Perl, donde, típicamente pantalla. También puede utilizar el operador de redirección> salida al archivo especificado:

El programa anterior, los resultados de salida son los siguientes:

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

Tenga en cuenta que el comando es necesario incluir variables de entorno, tales como la producción o $ HOME $ PATH, de la siguiente manera:

#!/usr/bin/perl

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

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

1;

El programa anterior, los resultados de salida son los siguientes:

/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

tenedor función ()

función tenedor Perl () se utiliza para crear un nuevo proceso.

Devuelve el niño en el PID del proceso padre, en el proceso hijo devuelve 0. Si un error (por ejemplo, falta de memoria) se produjo rendimientos no def, y $! Se establece en el mensaje de error correspondiente.

Puede ser utilizado en conjunción con un tenedor y exec. exec proceso de ejecución de la función que se completa después del final de comando entre comillas.

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

El programa anterior, los resultados de salida son los siguientes:

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

Si se cierra el proceso, se envía una señal al proceso padre después CHLD, se convertirá en un proceso de muertos que requiere una espera del proceso padre y waitpid terminado. Por supuesto, también se puede establecer $ SIG {} para 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;

El programa anterior, los resultados de salida son los siguientes:

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

función Kill

Perl kill ( "señal", ( lista de procesos)) envía una señal a un grupo de procesos.la señal es una señal digital enviada 9 para matar el proceso.

Primer vistazo a Linux de uso común de la señal, consulte la siguiente lista:

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

El siguiente ejemplo se procesa 104 y 102 para enviar la señal SIGINT:

#!/usr/bin/perl

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