Vous pouvez créer des processus de différentes manières en Perl.
Ce didacticiel abordera certaines méthodes de gestion des processus.
Vous pouvez obtenir l'ID du processus en utilisant la variable spéciale $$ ou $PROCESS_ID .
Le hachage %ENV stocke les variables d'environnement dans le processus parent, qui est le shell. Ces variables peuvent être modifiées en Perl.
exit() est généralement utilisé pour quitter un processus enfant. Le processus principal se termine une fois tous les processus enfants terminés.
Tous les handles ouverts seront copiés par la fonction dup() dans le sous-programme, et tous les handles fermés par le processus n'affecteront pas les autres processus.
Les commandes Unix peuvent être facilement exécutées à l’aide de l’opérateur backtick. Vous pouvez insérer quelques commandes simples dans les backticks. Une fois la commande exécutée, les résultats seront renvoyés :
#!/usr/bin/perl@files = `ls -l`;foreach $file (@files){ print $file;}1;
En exécutant le programme ci-dessus, les résultats de sortie sont les suivants :
drwxr-xr-x 3 racine racine 4096 14 septembre 06:46 9-14drwxr-xr-x 4 racine racine 4096 13 septembre 07:54 android-rw-r--r-- 1 racine racine 574 17 septembre 15:16 index .htmdrwxr-xr-x 3 544 401 4096 6 juillet 16:49 MIME-Lite-3.01-rw-r--r-- 1 racine racine 71 17 septembre 15:16 test.pl……
Vous pouvez également utiliser la fonction system() pour exécuter des commandes Unix. L'exécution de cette commande affichera directement les résultats. Par défaut, il sera envoyé à l'endroit où pointe actuellement STDOUT de Perl, qui est généralement l'écran. Vous pouvez également utiliser l'opérateur de redirection > pour générer un fichier spécifique :
En exécutant le programme ci-dessus, les résultats de sortie sont les suivants :
drwxr-xr-x 3 racine racine 4096 14 septembre 06:46 9-14drwxr-xr-x 4 racine racine 4096 13 septembre 07:54 android-rw-r--r-- 1 racine racine 574 17 septembre 15:16 index .htmdrwxr-xr-x 3 544 401 4096 6 juillet 16:49 MIME-Lite-3.01-rw-r--r-- 1 racine racine 71 17 septembre 15:16 test.pl……
Vous devez faire attention au résultat de la commande, y compris aux variables d'environnement telles que $PATH ou $HOME, comme indiqué ci-dessous :
En exécutant le programme ci-dessus, les résultats de sortie sont les suivants :
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbinJe suis la variable Perl /usr/local/bin:/bin:/usr/bin:/ usr /local/sbin:/usr/sbin:/sbin
La fonction Perl fork() est utilisée pour créer un nouveau processus.
Renvoie le PID du processus enfant dans le processus parent et 0 dans le processus enfant. Si une erreur se produit (par exemple, mémoire insuffisante), undef est renvoyé et $! est défini sur le message d'erreur correspondant.
fork peut être utilisé conjointement avec exec. Le processus se termine une fois que la fonction exec exécute la commande entre guillemets.
En exécutant le programme ci-dessus, les résultats de sortie sont les suivants :
Sortie via le processus parent Sortie via le processus enfant ID du processus terminé le dimanche 19 juin 2016 à 22:21:14 CST ID du processus : 47117
Si le processus se termine, il enverra un signal CHLD au processus parent et il deviendra un processus zombie. Le processus parent doit utiliser wait et waitpid pour le terminer. Bien sûr, vous pouvez également définir $SIG{CHLD} sur IGNORG :
En exécutant le programme ci-dessus, les résultats de sortie sont les suivants :
Sortie via le processus parent Sortie via le processus enfant ID du processus terminé le dimanche 19 juin 2016 à 22:30:56 CST ID du processus : -1
Perl kill('signal', (Process List)) envoie un signal à un groupe de processus. Le signal est le signal numérique envoyé, 9 consiste à tuer le processus.
Tout d’abord, jetons un coup d’œil aux signaux couramment utilisés sous Linux, consultez la liste suivante :
Explication du nom du signal et de l'annotation de la valeur———————————————————————————————— ——————————— ———HUP 1 A Hang détecté INT 2 A Interruption du clavier QUIT 3 A Arrêt du clavier ILL 4 A Instruction illégale ABRT 6 C Défaillance FPE 8 C Virgule flottante anormale KILL 9 Signal de la borne AF USR1 10 A Signal défini par l'utilisateur 1SEGV 11 C Accès mémoire illégal USR2 12 A Signal défini par l'utilisateur 2PIPE 13 A Ecriture dans le tube ALRM sans lecteur 14 A Signal de minuterie TERM du réveil 15 A Signal de terminal CHLD 17 B Terminaison du processus enfant CONT 18 E Continuer STOP si arrêté 19 DF Arrêter le processus TSTP 20 D Tapez la commande d'arrêt TTIN sur le tty 21 D Tapez TTOU sur le tty du processus en arrière-plan 22 D sortie tty vers le processus en arrière-plan
L'exemple suivant envoie des signaux SIGINT aux processus 104 et 102 :