FAQ PerlConsultez toutes les FAQ

Nombre d'auteurs : 18, nombre de questions : 250, dernière mise à jour : 29 octobre 2015  Ajouter une question

 

Bienvenue sur la FAQ Perl. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions élémentaires de ce fantastique langage. Perl est très utilisé dans différents domaines depuis la gestion système, le réseaux, l'administration de bases de données, le web (CGI), la bureautique, la conception d'interfaces graphiques ou des contextes scientifiques telle la bioinformatique. Nous espérons que cette FAQ vous sera d'une grande utilité.

Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez

Bonne lecture !


SommairePerl avancéLes processus (5)
précédent sommaire suivant
 

Un processus est un appel au système pour exécuter un programme. Dans ce chapitre, nous allons envisager trois 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 :

Code perl : Sélectionner tout
system "ls";
Dans ce cas, nous appelons la commande Unix "ls" qui affichera son résultat sur la sortie standard.

Code perl : Sélectionner tout
1
2
my $commande = 'ls'; 
system($commande) == 0 or die "Erreur de la commande : $commande\n";

Mis à jour le 8 mai 2005 djibril 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.

Code perl : Sélectionner tout
1
2
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 longs et pour lesquels vous aurez besoin de libérer des ressources rapidement.

Mis à jour le 8 mai 2005 GLDavid

Utiliser les backquotes (ou apostrophes inversées pour les francophones) vous permettra de récupérer une sortie pour vos programmes. Par exemple :

Code perl : Sélectionner tout
1
2
$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 contenue 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.

Mis à jour le 8 mai 2005 GLDavid

Amis du C, réjouissez-vous ! Votre fonction pour les threads favoris, à savoir fork, est aussi présente dans Perl. Pour les non-initiés, à quoi sert la fonction fork ?

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. Elle duplique (clone) un processus en créeant une copie conforme de lui même :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
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éé.
Tant que cette variable $pid demeure définie, le processus enfant reste en vie et exécute la tâche qui lui a été assignée : écrire une chaîne de caractères 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 obtenue, le processus père reprend la main et écrit une chaîne de caractères.

Mis à jour le 8 mai 2005 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
Perl vous permet ainsi de manipuler ces différents signaux et de les faire interagir avec vos processus.

Mis à jour le 8 mai 2005 GLDavid

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

 
Responsable bénévole de la rubrique Perl : djibril -