Puede crear procesos de diferentes maneras en Perl.
Este tutorial discutirá algunos métodos de gestión de procesos.
Puede obtener el ID del proceso utilizando la variable especial $$ o $PROCESS_ID .
El hash %ENV almacena las variables de entorno en el proceso principal, que es el shell. Estas variables se pueden modificar en Perl.
exit() se usa generalmente para salir de un proceso secundario. El proceso principal sale después de que todos los procesos secundarios hayan salido.
Todos los identificadores abiertos serán copiados por la función dup() en la subrutina, y todos los identificadores cerrados por el proceso no afectarán a otros procesos.
Los comandos de Unix se pueden ejecutar fácilmente utilizando el operador de comillas invertidas. Puede insertar algunos comandos simples entre comillas invertidas. Después de ejecutar el comando, se devolverán los resultados:
#!/usr/bin/perl@files = `ls -l`;foreach $archivo (@files){ print $archivo;}1;
Al ejecutar el programa anterior, los resultados de salida son los siguientes:
drwxr-xr-x 3 raíz raíz 4096 14 de septiembre 06:46 9-14drwxr-xr-x 4 raíz raíz 4096 13 de septiembre 07:54 android-rw-r--r-- 1 raíz raíz 574 17 de septiembre 15:16 índice .htmdrwxr-xr-x 3 544 401 4096 6 de julio 16:49 MIME-Lite-3.01-rw-r--r-- 1 raíz raíz 71 17 de septiembre 15:16 test.pl……
También puede utilizar la función system() para ejecutar comandos de Unix. La ejecución de este comando generará los resultados directamente. De forma predeterminada, se enviará al lugar donde apunta actualmente el STDOUT de Perl, que suele ser la pantalla. También puede utilizar el operador de redirección > para enviar a un archivo específico:
Al ejecutar el programa anterior, los resultados de salida son los siguientes:
drwxr-xr-x 3 raíz raíz 4096 14 de septiembre 06:46 9-14drwxr-xr-x 4 raíz raíz 4096 13 de septiembre 07:54 android-rw-r--r-- 1 raíz raíz 574 17 de septiembre 15:16 índice .htmdrwxr-xr-x 3 544 401 4096 6 de julio 16:49 MIME-Lite-3.01-rw-r--r-- 1 raíz raíz 71 17 de septiembre 15:16 test.pl……
Debe prestar atención a la salida del comando, incluidas las variables de entorno como $PATH o $HOME, como se muestra a continuación:
Al ejecutar el programa anterior, los resultados de salida son los siguientes:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinSoy la variable Perl /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
La función Perl fork() se utiliza para crear un nuevo proceso.
Devuelve el PID del proceso hijo en el proceso padre y 0 en el proceso hijo. Si se produce un error (por ejemplo, memoria insuficiente), se devuelve undef y se establece $! en el mensaje de error correspondiente.
fork se puede utilizar junto con exec. El proceso finaliza después de que la función ejecutiva ejecuta el comando entre comillas.
Al ejecutar el programa anterior, los resultados de salida son los siguientes:
Salida a través del proceso principal Salida a través del proceso secundario ID del proceso completado el domingo 19 de junio de 2016 22:21:14 CST ID del proceso: 47117
Si el proceso sale, enviará una señal CHLD al proceso principal y se convertirá en un proceso zombie. El proceso principal debe usar wait y waitpid para finalizarlo. Por supuesto, también puedes configurar $SIG{CHLD} en IGNORG:
Al ejecutar el programa anterior, los resultados de salida son los siguientes:
Salida a través del proceso principal Salida a través del proceso secundario ID de proceso completado el domingo 19 de junio de 2016 22:30:56 CST ID de proceso: -1
Perl kill('señal', (Lista de procesos)) envía una señal a un grupo de procesos. La señal es la señal digital enviada, 9 es para finalizar el proceso.
Primero, echemos un vistazo a las señales comúnmente utilizadas en Linux; consulte la siguiente lista:
Explicación del nombre de la señal y anotación de valor———————————————————————————————— ——————————— ———HUP 1 A Bloqueo detectado INT 2 A Interrupción desde el teclado QUIT 3 A Detención desde el teclado ILL 4 A Instrucción ilegal ABRT 6 C Fallo FPE 8 C Punto flotante Anormal KILL 9 Señal del terminal AF USR1 10 A Señal definida por el usuario 1SEGV 11 C Acceso ilegal a la memoria USR2 12 A Señal definida por el usuario 2PIPE 13 A Escritura en la tubería ALRM sin lector 14 A Señal del temporizador TERM del despertador 15 A Señal del terminal CHLD 17 B Terminación del proceso hijo CONT 18 E Continuar STOP si se detiene 19 DF Detener el proceso TSTP 20 D Escriba el comando de parada TTIN en tty 21 D Escriba TTOU en el tty del proceso en segundo plano 22 D salida tty al proceso en segundo plano
El siguiente ejemplo envía señales SIGINT a los procesos 104 y 102: