Syst`emes d’exploitationCours no. 12Jean-S´ebastien CoronUniversit´e du LuxembourgNovember 22, 2009Jean-S´ebastien Coron Syst`emes d’exploitationProgrammation en C sous UNIXManipulation de processus.Les commandes fork(),wait().Communication inter-processus.Les signauxJean-S´ebastien Coron Syst`emes d’exploitationLes processusCr´eation d’un processus.Lorsqu’on entre une commande, le shell lance un processuspour l’ex´ecuter.Le shell attend la fin du processus, puis attend la commandesuivante.Arborescence de processus.Chaque processus a un p`ere, celui qui l’a lanc´e.Le num´ero du processus du p`ere est le PPID.Un processus p`ere peut avoir plusieurs processus filsSous UNIX, un premier processus init est cr´e´e avec un PIDde 1. Anc`etre de tous les processus.Jean-S´ebastien Coron Syst`emes d’exploitationCr´eation de processusDuplication d’un processus.Seule fac¸on de cr´eer un processus `a bas niveau.Appel syst`eme fork()Cr´ee une copie complˆete du processus, fils de ce processus.Le fils change de programme en appelant exec().La fonction exec() remplace le code et ses donn´ees par celuid’une nouvelle commande.Jean-S´ebastien Coron Syst`emes d’exploitationEx´ecution d’une commandeEx´ecution d’une commande: tar -zcvf file *Le shell se duplique avec fork(). On a alors deux processusshell identiques.Le shell p`ere attend la fin du processus fils avec wait().Le shell fils remplace son ex´ecutable par celui de la commandetar avec exec()La ...
Manipulation de processus. Les commandes fork(),wait() . Communication inter-processus. Les signaux
ammanoitPrgorXNICsensUou
ecorpseLssusoCneSnorbe´Sitsaexd’oiplt`ysesemJean-
Cr´eationd’unprocessus. Lorsqu’on entre une commande, le shell lance un processus pourl’ex´ecuter. Le shell attend la fin du processus, puis attend la commande suivante. Arborescence de processus. Chaque processus a un pere ,celuiquil’alance´. ` Lenumeroduprocessusdup`ereestlePPID. ´ Un p ` t ir plusieurs processus fils rocessus pere peu avo Sous UNIX, un premier processus init estcree´avecunPID ´ de1.Anc`etredetouslesprocessus.
ontita
S´n-eaJsySnoroCneitsabe`tmese’dxelpioattion
Duplication d’un processus. Seulefa¸condecr´eerunprocessusa`basniveau. Appel t` fork() sys eme Cre´eunecopiecomplˆeteduprocessus,filsdeceprocessus. Le fils change de programme en appelant exec() . La fonction exec() remplace le code et ses donnees par celui ´ d’une nouvelle commande.
ationdeprocessuse´rC
´xceEnd’uutiommannecoedt`emesd’CoronSysitno
´ Execution d’une commande: tar -zcvf file * Le shell se duplique avec fork() . On a alors deux processus shell identiques. Leshellpe`reattendlafinduprocessusfilsavec wait() . Leshellfilsremplacesonexe´cutableparceluidelacommande tar avec exec() La commande tar s’exe´cute.Lorsquellesetermine,le ’ processus fils disparait. Leshellp`ereestr´eactive´etattendlacommandesuivante.
xelpioatneitsabe´S-naeJ
oitation
L’appel a fork() duplique le processus. L’execution continue dans les deux processus. ´ Valeurretourne´epar fork() : Dansleprocessusp`ere,retournelePIDdufils. Dans le processus fils, retourne 0. Silefork´echoue,renvoie-1. getpid() et getppid() getpid() retourne le PID du processus. getppid() retournelePIDdupe`reduprocessus.
La primitive wait permet`aunprocessusd’attendrelafin d’un de ses fils. Si pas de fils ou erreur, retourne -1. Sinon,retournelePIDdufilsquis’esttermine´. Doitˆetreappeleavec wait(0) ´ La primitive exit permet de terminer le processus qui l’appelle. void exit(int status) status permetd’indiquerauprocessusp`erequ’uneerreur s’est produite. status=0 si pas d erreur. ’