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;