Vous êtes sur la page 1sur 11

UNIVERSITE HASSAN 1ER

ECOLE NATIONALE DES SCIENCES APPLIQUÉES


KHOURIBGA

Création de processus
3. Arguments en ligne de commande

 arguments de la fonction main()


• 2ème argv (args values, valeurs des arguments)
o tableau
• 1er : argc (args count, nombre d’arguments)
o nombre d’élément de ce tableau
 Généralement, un programme reçoit en première position
de argv son propre nom de fichier exécutable
 Lorsqu’une application est lancée par un shell, la ligne de
commande est analysée et découpée en arguments en
utilisant comme séparateurs certains caractères spéciaux
• Par exemple, avec bash la liste de ces caractères est conservée
dans la variable d’environnement IFS et contient l’espace, la
tabulation et le retour chariot.
• Note: la valeur de IFS peut être changée
2
3. Arguments en ligne de commande

gcc nom_fic.c –o nom_ex ./nom_ex


 Exemple $ ./exemple_argv a bc "def ghi" \"jkl mno\"

3
Attendre la du processus fils
 Pour attendre la fin de n’importe quel processus
fils
• Wait(NULL)
 Pour attendre la fin de tous les processus fils
• Boucler tant que (Wait(NULL) >0)
 Pour attendre la fin d’un processus en particulier
• Waitpid()
Attendre la du processus fils
 Pour attendre la fin d’un processus en particulier
• pid_t waitpid (pid_t pid, int * status, int options);
• déclarée dans <sys/wait.h>
o Si pid>0 : waitpid attend la fin du processus dont le
PID correspond à cette valeur
o Si pid==0, on attend la fin de n’importe quel
processus fils appartenant au même groupe du le
processus appelant
o Si pid == –1, on attend la fin de n’importe quel fils
o si pid < –1, on attend la fin de n’importe quel
processus fils appartenant au groupe de processus
dont le numéro est –pid.
Processus zombie

 État « Z » dans la table de la commande ps


 un processus qui se termine passe automatiquement par
un état spécial, zombie1, en attendant que le processus
père ait lu son code de retour
• Si le père ne le lit pas, le fils peut rester indéfiniment à

l’état zombie
 Exemples:
1. le processus fils attend 2s avant de se terminer,
tandis que le processus père affiche régulièrement
l’état de son fils en invoquant ps
1. Exécuter
exemple_zombie_1 2. taper commande ps
2. Le processus père se termine dans 2s , alors que le
fils va continuer à afficher régulièrement le PID de son
père
Exécution de programmes

 Seule façon d’exécuter un nouveau programme: fonctions


de la famille exec()
• remplacer l’espace mémoire du processus appelant par
le code et les données de la nouvelle application
• il n’existe aucune routine ayant ce nom
• 6 variantes: execl(), execle(), execlp(), execv(),
execve() et execvp()
Exécution de programmes

• 6 variantes: execl(), execle(), execlp(), execv(),


execve() et execvp()
• Les fonctions dont le suffixe commencent par
o « l » utilisent une liste d’arguments pour transmettre les
variables
o « v » emploient un tableau comme le argv []
• Les fonctions se terminant par
o "e" transmettent l’environnement dans un tableau envp []
– les autres utilisent la variable globale environ
o "p" utilisent la variable d’environnement PATH pour rechercher
le répertoire dans lequel se situe l’application à lancer
– les autres nécessitent un chemin d’accès complet
Exécution de programmes

 execv()
• int execv (const char * application, const char * argv []);

• l’environnement est directement transmis par la variable


externe environ,
o "appli" contient le chemin d’accès au programme à
lancer à partir du répertoire de travail en cours ou à
partir de la racine du système de fichiers s’il
commence par un slash "/"
o argv[] contient les arguments qu’on trouve
habituellement sur la ligne de commande
– argv[0] : contient le nom de l’application à lancer

execv("./exemple", nv_argv);
Exercice

 Implémenter un programme qui permet de créer un


processus fils et père. Dans le même programme, déclarer
une variable m de type numérique, avant d’accéder aux
zones de code des deux processus.
1) afficher l’adresse et le contenu de la variable dans les
deux processus. qu’est ce que vous remarquez ?
2) Changer le contenu de la variable dans la partie
processus père. Afficher l’adresse et la valeur de la
variable dans les deux processus. qu’est ce que vous
remarquez.
3) Comment se fait la transmission de variable entre les
deux processus
Exercice

 Ecrire un programme qui appel autant de fork()


que nécessaire pour avoir un PID se finissant par
5. Il devra afficher tous les PID intermédiaires, et
une chaine de caractères quand il atteint son but.
Naturellement, il ne doit laisser aucun zombie
derrière lui.

Vous aimerez peut-être aussi