| auteur : GLDavid | Un processus est un appel au système pour exécuter un programme. Dans ce chapitre, nous allons envisager 3 façons d'exécuter des processus. Dans un premier temps, intéressons-nous à la fonction system. L'appel de cette fonction demande à Perl de lancer un processus enfant pour exécuter le programme appelé par system. Une fois que ce programme se termine, le processus enfant s'achève et rend la main au processus père à savoir votre programme :
Dans ce cas, nous appelons la commande Unix "ls" qui affichera son résultat sur la sortie standard.
|
| auteur : GLDavid | La fonction exec est semblable à system. Mais, sa différence avec la fonction précédente réside dans le fait que le processus père se termine en même temps que le processus fils. Ainsi :
exec ("ls");
print "Et maintenant, qu'allons-nous faire ?"; |
Dans ce programme, Perl lance un processus fils qui exécutera la commande ls. Mais, contrairement à system, lorsque la commande ls se termine, le processus fils meurt ainsi que le processus père.
exec est intéressant lorsque vous avez besoin de lancer via Perl des programmes particulièrement long et pour lequel vous aurez besoin de libérer des ressources rapidement.
|
| auteur : GLDavid | Utiliser les backquotes (ou apostrophes inversés pour les francophones stricts) vous permettra de récupérer une sortie pour vos programmes. Par exemple :
$sortie = `ls`;
print $sortie; |
Ce petit programme permet à Perl de lancer un processus fils qui exécutera la commande ls. A la fin de ce programme, le processus fils meurt en rendant au processus père la sortie de la commande ls contenu dans la variable scalaire $sortie. Bien entendu, rien ne vous empêche d'utiliser des tableaux pour récupérer les sorties de vos programmes.
|
| auteur : GLDavid | 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.
|
| auteur : GLDavid | Un signal système est un signal envoyé à un processus. Par exemple, sous Unix, citons :
SIGHUP | 1 | interruption de l'entrée | SIGINT | 2 | interruption clavier forte (Ctrl-C) | SIGQUIT | 3 | interruption clavier faible (Ctrl-\) | SIGILL | 4 | instruction illégale | SIGABRT | 6 | arrêt catastrophe d'un processus (abort()) | SIGKILL | 9 | arrêt impératif | SIGTERM | 15 | terminaison normale d'un processus | Ainsi, Perl vous permet de manipuler ces différents signaux et de les faire interagir avec vos processus.
|
Consultez les autres F.A.Q's
|
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2005 Developpez Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.