La fonction Perl Fork

La Fonction Perl Fork



Le fork() est une fonction intégrée de Perl qui est utilisée pour créer un processus enfant de tout processus en cours d'exécution et qui fonctionne uniquement sur les systèmes d'exploitation Linux. Il crée une copie distincte du processus en cours d'exécution et exécute les deux processus en parallèle. Ainsi, si la variable du processus parent est mise à jour, cela n'aura aucun effet sur la même variable du processus enfant ou vice versa. Les utilisations de la fonction fork() en Perl sont présentées dans ce tutoriel.

Syntaxe:

La syntaxe de la fonction fork() est donnée ci-dessous. Il renvoie une valeur numérique ou « undef ». Si la fonction fork() fonctionne correctement, un ID de processus particulier est renvoyé ou 0 est renvoyé pour le processus enfant. Il renvoie « undef » si la fonction fork() échoue.







identifiant ou fourchette indéfinie ( ) ;

Exemple 1 : Utilisation simple de la fonction Fork()

Créez un fichier Perl avec le script suivant qui crée un processus enfant à partir du processus actuel à l'aide de la fonction fork(). L'ID du processus est imprimé après l'exécution de la fonction fork(). Les variables des processus parent et enfant sont stockées dans des emplacements mémoire différents. Ainsi, si la valeur de la variable est modifiée dans le processus parent, cela n'apportera aucun changement pour la même variable du processus enfant ou vice versa. Dans ce script, la variable du processus parent est modifiée. Ensuite, les variables des processus parent et enfant sont imprimées.



#!/usr/bin/perl

utiliser strict ;
utiliser avertissements ;
utiliser 5.34.0 ;

#Déclarer une variable
ma $var = 'Fourchette d'essai' ;
#Fork le processus actuel
mon $process_id = fourchette ( ) ;

#Vérifiez l'identifiant du processus
si ( $process_id < 0 )
{
dire 'Impossible de bifurquer le processus.' ;
}
Elsif ( $process_id == 0 )
{
dire « Processus enfant : » ;
#Imprimer la valeur de la variable du processus enfant
dire 'La valeur de la variable : $var' ;
}
autre
{
dire 'Processus parent : $process_id' ;
#Mettre à jour la valeur de la variable
$var = 'Test de la fourchette 2' ;
#Imprimer la valeur de la variable du processus parent
dire 'La valeur de la variable : $var' ;
}

Sortir:



La sortie suivante apparaît après l'exécution du script. La variable du processus parent est modifiée avec la valeur « Test Fork 2 » mais la variable du processus enfant reste inchangée. Ainsi, la valeur de la variable du processus enfant est « Test Fork ». C'était la valeur après le fork :





  p1

Exemple 2 : Utilisation des fonctions Fork() et Wait()

Créez un fichier Perl avec le script suivant qui montre l'utilisation de la fonction fork() avec la fonction wait(). Trois variables sont déclarées au début du script. La fonction sleep() est utilisée dans le bloc du processus parent pendant 1 seconde et dans le processus enfant pendant 2 secondes. La somme des deux variables est calculée et stockée sur une autre variable à l'intérieur du bloc du processus parent. Les valeurs des deux variables sont multipliées et stockées sur une autre variable à l'intérieur du processus enfant. La fonction wait() est utilisée à la fin du script pour attendre la fin de la tâche d'un processus avant de démarrer la tâche d'un autre processus. Si la fonction fork() est utilisée plusieurs fois dans le script et que de nombreux processus s'exécutent en même temps, une situation de blocage peut survenir. Le problème peut être résolu en utilisant la fonction wait().



#!/usr/bin/perl

utiliser strict ;
utiliser avertissements ;
utiliser 5.34.0 ;

#Initialiser les variables
mon $n1 = dix ;
mon $n2 = 25 ;
mon $résultat = 0 ;

#Fork le processus actuel
mon $process_id = fourchette ( ) ;

#Vérifiez l'identifiant du processus
si ( $process_id == 0 )
{
#Calculer la multiplication des nombres
dire « Processus enfant : $$ » ;
$résultat = $n1 * $n2 ;
dire 'Attends 2 secondes... \n ' ;
dormir 2 ;
dire 'La multiplication de $n1 et $n2 est $result.' ;
}
Elsif ( $process_id > 0 )
{
#Calculer la somme des nombres
dire « Processus parent : $$ » ;
$résultat = $n1 + $n2 ;
dire 'Attends 1 seconde... \n ' ;
dormir 1 ;
dire 'La somme de $n1 et $n2 est $result.' ;
}
autre
{
dire 'Impossible de bifurquer le processus.' ;
}

#Attendre la fin de la tâche de processus
attendez ( ) ;

Sortir:

La sortie suivante apparaît après l'exécution du script. Selon le résultat, le processus enfant est créé avec succès, l'ID de processus du processus parent est imprimé et le script est mis en pause pendant 1 seconde pour terminer la tâche. Ensuite, l'ID du processus enfant est imprimé et le script est mis en pause pendant 2 secondes pour terminer la tâche. Le résultat des processus parent et enfant est imprimé ultérieurement :

  p2

Conclusion

Le but de l'utilisation de la fonction Perl fork() est montré dans ce didacticiel en créant un processus enfant et en effectuant différents types de tâches à l'intérieur du bloc des processus parent et enfant.