Amis du C, réjouissez-vous ! Votre fonction pour les threads favorites, à savoir fork, est aussi présente dans Perl. Pour les non-initiés, à quoi sert la fonction fork ? Un peu de sémantique, fork en anglais signifie "fourche". Vous ne voyez toujours pas ? Cette fonction permet de créer un processus enfant et de mettre le processus parent (votre programme Perl) en veille en attendant la fin de ce processus enfant :
defined($pid = fork) or die "Pas de fork possible : $!";
unless($pid) {
print "Processus fils.\n";
exec "ls";
}
waitpid($pid, 0);
print "Retour au père.";
Analysons ce code. A la première ligne, la variable scalaire reçoit le résultat de fork. Si cette variable est nulle (undef pour Perl), une erreur est levée. Dans le cas contraire, $pid est défini, vaut zéro et le processus enfant est crée. Tant que cette variable $pid demeure défini, le processus enfant reste en vie et exécute la tâche qui lui a été assigné : écrire une chaîne de caractère et lancer la commande système ls. Si vous avez bien suivi ce chapitre, vous aurez noté que cet appel utilise la fonction exec. Une fois que cette fonction termine sa tâche, le processus qui l'appelle se termine en même temps que la fonction. Ainsi, le processus enfant meurt (l'informatique est cruelle !) et retourne son code au numéro pid du père. D'ailleurs, que fait le processus père pendant l'exécution du fils ? Avec la fonction waitpid, celui-ci attend la valeur de retour pid de son fils. Une fois cette valeur obtenu, le processus père reprend la main et écrit une chaîne de caractère.
|