IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Sommaire > Les processus
        La fonction system
        La fonction exec
        Utiliser les backquotes
        Fork you !
        Les signaux

        


La fonction system
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 :

system "ls";
Dans ce cas, nous appelons la commande Unix "ls" qui affichera son résultat sur la sortie standard.


La fonction exec
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.


Utiliser les backquotes
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.


Fork you !
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.


Les signaux
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 arret 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

Ce document issu de www.developpez.com est soumis à la licence GNU FDL traduit en français ici
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.