Académique Documents
Professionnel Documents
Culture Documents
Présentation des
Processus
9 o tobre 2009
Romuald G RIESNER
Copyright. Tous droits réservés.
Table des matières
Avant propos iv
Bibliographie 22
i
TABLE DES MATIÈRES R. Griesner
Index 23
ii
Table des gures
iii
Avant propos
Publi
Cet ouvrage s'adresse aux étudiants, aux te hni iens et aux ingénieurs en
informatique qui her hent une introdu tion pratique à Unix en général et
à Linux en parti ulier. D'autre part, je fais souvent référen e aux program-
meurs, aux utilisateurs et autres atégories mas ulines. C'est la fon tion qui
est mas uline et pas la personne qui exer e la fon tion. Je m'adresse don , à
un publi omposé autant de femmes que d'hommes (et/ou inversement).
Considérations légales
Les informations ontenues dans et ouvrage ne sont pas destinées à être
utilisées pour enfreindre la loi sur les Droits d'Auteur et Droits Voisins de la
So iété de l'Information (DADVSI). Le le teur reste entièrement responsable
de l'usage de es informations et sa responsabilité, ivile et pénale, peut être
engagée.
L'utilisation des informations ontenues dans et ouvrage, par le le teur, ne
peuvent en au un as engager la responsabilité de l'auteur, y ompris en as
de perte d'information, de destru tion de matériel et de pertes nan ières de
toute sorte. Et ela quel que soit le but poursuivi par le le teur.
Règles typographiques
Les ara tères du texte ont été é rits en Computer Modern Roman pour les
versions PostS ript destinées à être imprimées et en Times Roman pour les
versions PDF. Pour fa iliter la le ture et la ompréhension, ertains mots du
texte ont été mis en valeur. Vous trouverez i-dessous les règles utilisées.
iv
R. Griesner
Texte courrier gras à chasse fixe pour le texte entré par l'utilisa-
teur dans les exemples. C'est à dire, les noms des ommandes suivies de leurs
arguments.
Texte courrier à chasse fixe pour les résultats des ommandes dans les
exemples.
Texte en roman gras pour les ommandes omposées d'un seul ara tère
et les ara tères isolés du texte, lorsque ela est né essaire.
Texte pen hé ave des espa es supplémentaires pour les formules mathéma-
tiques, omme dans y = ax2 + bx + c.
Le ara tère dollar ($) représente l'invite (le prompt en anglais) de l'interpré-
teur de ommande pour l'utilisateur standard et le ara tère dièse (#) pour
l'administrateur root.
Le urseur est représenté par le ara tère souligné (_) et suit généralement
l'invite, omme dans $ _.
L'appui simultané sur la tou he Ctrl et sur la tou he x est s'é rit ^X.
L'é riture [n℄ renvoie à la nième référen e bibliographie in ne.
Les pages indiquées, dans l'index, se rapportent aux pages des paragraphes
où les diérents termes apparaissent.
Commentaires et questions
Pour améliorer et ouvrage, vous pouvez envoyer vos questions, ommen-
taires, remarques, suggestions et signalements d'erreurs à l'adresse éle tron-
ique suivante :
Romuald.Griesneruniv-mulhouse.fr
Colophon
Cet ouvrage a été réalisé sur un ordinateur portable sous Linux (RedHat 8.0)
à l'aide de vim pour l'é riture, ispell pour la orre tion orthographique,
v
R. Griesner
LATEX pour la omposition et xfig pour les gures. La version PostS ript a
été réée ave dvips et PDF ave ps2pdf.
vi
Chapitre 1
Présentation des pro essus
1.1 Dénition
Un pro essus1 orrespond à un programme qui s'exé ute. Un programme
exé utable est onservé dans un hier binaire sur un support externe d'in-
formation omme un disque dur. Lorsque un pro essus demande au noyau
d'exé uter un programme, e dernier devient un pro essus. Le pro essus de-
mandeur est appelé le parent2 tandis que le nouveau pro essus réé devient
le des endant3 . Tout pro essus peut demander la réation d'un pro essus,
mais il ne peut avoir qu'un seul parent.
1
1.2. CRÉATION DES PROCESSUS R. Griesner
utable ;
de ode à partir de l'image des instru tions ontenues dans le hier exé-
utable ;
de pile utilisée pour les appels de fon tions et de pro édures ;
de données système4 dans lequel le noyau sto ke les informations né es-
saires à la gestion du pro essus.
segment de données
données
chargement
instructions
segment de code
pgm
Disque Dur
segment de pile
segment de données
système
Mémoire Centrale
Fig. 1.1 Opération de hargement
Remarque : la des ription des segments asso iés au pro essus ne orrespon-
dant pas exa tement à la réalité. D'abord par e que haque Unix possède ses
ara téristiques propres dans e domaine et ensuite par e que nous her hons
à a her la réalité relativement omplexe de e mé anisme. Notre appro he,
permet toutefois de se faire une idée de son fon tionnement. Vous trouverez
les détails sur les segment dans le système Linux dans l'ouvrage[1℄.
Ensuite, le noyau ae te un numéro unique, appelé PID omme Pro ess
4 appelé aussi Pro ess Control Blo k en anglais.
2
1.3. CONCURRENCE ENTRE PROCESSUS R. Griesner
IDenti ation , au pro essus réé. Ce numéro est ins rit dans le segment de
données système. Dans l'état de vos onnaissan e nous pouvons donner une
représentation possible de e segment ave la gure 1.2 page 3. Le premier
pro essus réé s'appelle init et son PID vaut un. C'est l'an être de tous
les pro essus d'un système. Il est lan é pendant la phase de démarrage du
système.
PID
PID processus parent
pointeur seg. de code
3
1.3. CONCURRENCE ENTRE PROCESSUS R. Griesner
Bash Donnees
Bash code
Bash Donnees
Bash code
le pro esseur entre les diérents pro essus qui exé utent le même programme
bash. Pour ela le noyau dispose des stru tures de données suivantes :
une variable ACTIF qui ontient le PID du pro essus dont le ode est en
ours d'exé ution ;
une le d'attente des pro essus prêts à être exé utés.
Le noyau attribue à haque pro esse qui s'exé ute une durée d'exé ution
appelée quantum de temps. Après l'é oulement de ette durée le pro essus
a tif est suspendu et son PID est déposé dans la le d'attente des pro essus
prêts. Le PID du premier pro essus est extrait de la le d'attente puis af-
fe té à la variable ACTIF. Ensuite le pro essus orrespondant est relan é. Ce
mé anisme est présenté sur la gure 1.4 page 5.
Le quantum de temps est très ourt, de l'ordre de la millise onde voire plus
petit en ore. Soit environs 1000 pro essus exé utés par se onde. Cela donne
l'impression à l'utilisateur de disposer de l'ordinateur pour lui tout seul et
que les pro essus s'exé utent en parallèle.
Lors de la réation d'un pro essus, son PID est introduit dans la le d'attente
des pro essus prêts et elui i doit attendre son tour pour démarrer. Un
pro essus se termine lorsqu'il est a tif et demande sa terminaison au noyau.
Ce mé anisme n'est pas parfait ar un pro essus qui demande la réalisation
d'une entrée sortie se voit attribuer un quantum de temps qu'il passera à
attendre la n de l' entrée sortie. Don pour libérer le pro esseur pendant
es temps d'attente, le noyau dispose d'une le d'attente supplémentaire : la
le d'attente de n d'entrée sortie.
4
1.3. CONCURRENCE ENTRE PROCESSUS R. Griesner
Creation
Fin
Quantum de temps
Dès qu'un pro essus demande une entrée sortie, le noyau le suspend et trans-
fert son PID de la variable ACTIF vers la le d'attente de n d'entrée sortie
et le premier pro essus prêt devient a tif. Lorsqu'un entrée sortie se termine
le PID du pro essus, qui en avait fait la demande, est extrait de la le d'at-
tente de n d'entrée sortie et re y lé dans le d'attente des pro essus prêts.
Ce mé anisme est dé rit sur la gure 1.5 page 5.
Creation
Fin
Quantum de temps
5
1.4. LISTE DE PROCESSUS R. Griesner
Pour a éder à l'état des pro essus nous utilisons la ommande ps omme
pro ess status . Cette ommande est utilisée par obtenir la liste des pro-
essus qui ont été réés à partir du terminal ourant. Exemple :
$ ps
PID TTY TIME CMD
3182 pts/0 00:00:00 bash
3183 pts/0 00:00:00 ps
$ _
$ ps
PID TTY TIME CMD
3182 pts/0 00:00:00 bash
3184 pts/0 00:00:00 ps
$ _
$ ps -ugriesner
PID TTY TIME CMD
6
1.4. LISTE DE PROCESSUS R. Griesner
$ ps -tpts/1
1162 pts/1 00:00:00 vim
1205 pts/1 00:00:00 bash
$ _
Nous retrouvons une partie de la liste pré édente réduite au terminal /pts/1.
L'option -f a he la liste des pro essus démarrés à partir du terminal
ourant ave des informations omplémentaires. Nous y trouvons le user_id
propriétaire du pro essus, le PID du pro essus parent et l'heure de lan ement
dans la olonne STIME6 . Exemple :
$ ps -f
UID PID PPID C STIME TTY TIME CMD
griesner 1069 1067 0 08:59 pts/0 00:00:00 /bin/bash
6 omme Start Time.
7
1.4. LISTE DE PROCESSUS R. Griesner
Et enn l'option -e pour obtenir la liste de tous les pro essus qui tourne
a tuellement sur l'ordinateur. Exemple :
$ ps -e
PID TTY TIME CMD
1 ? 00:00:04 init
2 ? 00:00:00 keventd
3 ? 00:00:00 kapmd
4 ? 00:00:00 ksoftirqd_CPU0
.............
$ ps -e | wc -l
64
$ _
La liste débute ave le pro essus init de PID numéro un et suivent tous les
autres pro essus. A tuellement, nous avons 64 pro essus qui s'exé utent sur
l'ordinateur.
L'arbores en e des pro essus,à partir du pro essus init, est obtenu à l'aide
de la ommande pstree, omme Pro ess Tree . Exemple :
$ pstree
init-+-anacron
|-apmd
|-atd
|-gdm-binary---gdm-binary-+-X
| ‘-gnome-session---ssh-agent
|-gnome-panel
|-konsole---bash---pstree
|-konsole---bash
|-kswapd
‘-xscreensaver
$ _
8
1.5. PLAN D'EXÉCUTION R. Griesner
$ sleep 100&
[1] 16836
$ echo $!
16836
$ ps
PID TTY TIME CMD
1011 pts/0 00:00:00 bash
16836 pts/0 00:00:00 sleep
16839 pts/0 00:00:00 ps
$ jobs
[1]+ 16836
$ _
9
1.5. PLAN D'EXÉCUTION R. Griesner
que nous verrons plus loin et le PID du pro essus démarré en arrière plan.
La ommande jobs a he le PID des pro essus démarrés en arrière plan et
à ha un d'eux il ae te, entre ro het, un numéro de tâ he9 . La présen e du
signe plus (+) sera vue plus loin.
Prenons maintenant l'exemple d'un pro essus qui réalise une le ture lavier :
/* programme pgm */
main()
{
int n; /* un nombre entier */
printf("Entrer un entier : \n");
s anf("%d", &n);
printf("n=%d\n", n);
exit(0);
}
10
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
nous ramenons le pro essus qui était en arrière plan en ave plan e qui
nous permet, enn d'entrer un entier pour que le pro essus puisse ontinuer
à s'exé uter.
Voyons, maintenant, e qui se passe lorsque nous démarrons plusieurs pro-
essus, qui réalisent une le ture du lavier, en arrière plan.
Nous avons, d'abord, réalisée deux opies du programme pgm. Ensuite, nous
avons démarré en arrière plan les trois programmes, qui ha un ont a hé
leur message et se sont retrouvés arrêtés. Nous retrouvons le numéros de tâ he
entre ro het. Le signe plus (+) indique la tâ he la plus ré emment démarrée
et signe moins (-) la suivante dans l'ordre. Nous pouvons, maintenant, hoisir
quelle tâ he nous voulons ramener en avons plan en donnant à la ommande
fg le numéro de tâ he en argument après un ara tère pour ent (%).
Remarque : dans la ligne de ommande du démarrage des trois pro essus il
ne faut pas séparer les nom des programmes par un point virgule sinon vous
obtenez un message d'erreur.
11
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
Par défaut les hiers standards d'entrée sortie sont dirigés (ae tés, onne -
tés) vers des éléments matériels du poste de travail :
stdin est onne té au lavier ;
stdout est onne té à l'é ran ;
stderr est également onne té à l'é ran.
Sur la gure 1.6 page 12 nous avons un pro essus qui lit ses données à partir
du lavier et é rit ses résultats et ses messages d'erreur sur l'é ran.
Le temps de l'exé ution d'une ommande l'ae tation standard des entrées
sorties peut-être modiée. C'est e que l'on appelle la redire tion des entrées
sorties.
ST
DE
RR
12
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
Dans e as, les é ritures ne se font plus sur l'é ran mais dans un hier qui
onservera le résultat de la ommande. La gure 1.7 page 13 nous montre e
type de redire tion.
Exemple :
Remarque : le texte qui suit le ara tère # est un ommentaire, ignoré par
l'interpréteur de ommandes.
La ommande date é rit son résultat dans le hier {fi _date. Il ne s'a he
don rien à l'é ran. La ommande at a he, à l'é ran, le ontenu du hier
fi _date.
Le ontenu du hier fi _date est d'abord ea é avant de re evoir le résultat
de la ommande date. Pour onserver l'an ien ontenu du hier il faut
pro éder de la manière suivante :
13
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
L'a hage de la ommande ls est don perdu. Nous verrons plus loin à quoi
ela peut servir.
Comme pour la redire tion de stdout, les erreurs peuvent être redirigées vers
un hier. La gure 1.8 page 15 nous montre e type de redire tion.
Exemple :
14
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
STDIN PROCESS
ST
DE
RR
Dans e as le pro essus lit ses données à partir d'un hier. La gure 1.9
page 16 nous montre e type de redire tion.
Exemple :
La ommande pgm lit ses données à partir du hier pgm_in. L'utilisateur n'a
pas besoin d'entrer es données au lavier. Il aura simplement, au préalable,
réé le hier pgm_in (ave vim). Ce hier ontient une donnée par ligne et
es données doivent être du type attendu par le programme. Il est intéres-
sant de réer un hier de données, pendant la phase de mise au point d'un
programme, surtout si les données sont nombreuses. Cela évite d'avoir à les
retaper à haque exé ution du programme.
15
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
Dans les redire tions pré édentes, il est possible d'omettre les numéros d'iden-
ti ation de stdin et stdout. Grâ e à ette fa ilité d'é riture nous pouvons
é rire :
Notre programme pgm peut lire ses données à partir du hier pgm_in et
é rire ses résultats dans le hier pgm_out simultanément omme indiqué sur
la gure 1.10 page 17.
Nos pouvons aussi rediriger, simultanément, le stdout et stderr vers le
même hier. Exemple :
16
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
fic
$ _
ou
$ cat ls_res
ls: fic: Aucun fichier ou répertoire de ce type
$ _
17
1.6. REDIRECTION DES ENTRÉES SORTIES STANDARDS R. Griesner
1.6.5 Conduits
Imaginons que nous voulons ompter le nombre de hiers dans notre réper-
toire ourant (Working Dire tory). Une première méthode est exposée i-
dessous :
$ ls | wc -l
33
$ _
STDIN STDOUT
STDIN
ls STDOUT
wc −l
18
1.7. TERMINAISON DES PROCESSUS R. Griesner
$ {
> pgm > progs_out
> prog >> progs_out
> }<progs_in
$ _
Les programmes pgm et prog lisent sur leur stdin qui sont redirigés vers le
hier progs_in. Le ara tère supérieur est l'invite se ondaire ( ontenue dans
la variable PS2) qui indique que la ligne de ommande n'est pas terminée.
Autre exemple :
/* programme pgm_1 */
main()
{
printf("hello\n");
}
11 Exit Status en anglais.
19
1.7. TERMINAISON DES PROCESSUS R. Griesner
$ ./pgm_1
hello
$ echo $? # affichage état de sortie
6
$ _
/* programme pgm_2 */
main()
{
printf("hello\n");
exit(0);
/*
* les instru tions qui suivent ne
* jamais exé utées.
*/
printf("boy\n");
}
et exé utons le :
$ ./pgm_2
hello
$ echo $? # affichage état de sortie
0
$ _
$ sleep 1000&
[1] 16836
$ ps
PID TTY TIME CMD
1011 pts/0 00:00:00 bash
20
1.7. TERMINAISON DES PROCESSUS R. Griesner
$ sleep 1000&
[1] 16836
jobs
[1]+ Running sleep 1000 &
$ kill %1
$ ps
PID TTY TIME CMD
1011 pts/0 00:00:00 bash
16864 pts/0 00:00:00 ps
[1]+ Complété sleep 1000
$ _
21
Bibliographie
22
Index
arrière plan, 9 de données, 1
avant plan, 9 de données système, 1
de pile, 1
ba kground, 9 stderr, 11
hild pro ess, 1 stdin, 11
ommande stdout, 11
exit, 19
fg, 10
init, 2
jobs, 9, 21
kill, 20
ps, 6
pstree, 8
sleep, 9
Exit Status, 19
les d'attente, 3
foreground, 9
parent pro ess, 1
PID, 2
pro ess, 1
Pro ess Control Blo k, 1
Pro ess Status, 6
pro essus, 1
pro essus des endant, 1
pro essus parent, 1
quantum de temps, 3
segment
de ode, 1
23