diff --git a/unix/processus.tml b/unix/processus.tml new file mode 100644 index 0000000..130722b --- /dev/null +++ b/unix/processus.tml @@ -0,0 +1,288 @@ + + + +
++Unix est un système multi-tâches, c'est-à-dire qu'il peut exécuter +plusieurs programmes à la fois. Un processus est une instance d'un programme +en train de s'exécuter, une tâche. Le shell crée un nouveau processus pour +exécuter chaque commande. +
+
+Si on lance une commande qui prend beaucoup de temps (comme un calcul, ou une
+nouvelle fenêtre), on peut l'interrompre par Control-C
. Ceci
+interrompt (définitivement) la commande. On peut aussi exécuter une commande
+en tâche de fond. Le shell rend alors la main avant la fin de la
+commande. Pour le faire, on ajoute un &
à la fin de la
+commande ; par exemple :
+
+chaland ~ $ cc -o grosprogramme grosfichier.c & + +chaland ~ $ xdvi monrapport.dvi &+ +
+Dans le premier exemple, on lance le compilateur cc
en parallèle
+avec le shell; dans le second exemple, on met le dvi
en tâche de
+fond, ce qui évite d'avoir à le relancer à chaque modification.
+
+On reprend la main immédiatement, sans attendre la fin de l'exécution de +la commande. On peut donc taper d'autres commandes dans le même terminal, +pendant que la précédente s'exécute. +
+ +
+Comme on vient de le voir, si vous avez pensé à terminer votre ligne de
+commande par une esperluette, le programme que vous avez lancé tourne en
+arrière-plan (background, abrégé en bg
).
+
+Si vous avez omis l'esperluette, le programme prend la précédence sur le shell.
+On dit qu'il tourne au premier plan (foreground, abrégé en
+fg
).
+Les lignes tapées au clavier sont mémorisées mais ne seront pas exécutées par le
+shell avant que le programme en cours d'exécution n'ait fini son calcul. Vous
+pouvez malgré tout faire passer ce programme en tâche de fond, grâce à la
+manipulation suivante :
+
+chaland ~ $ xdvi rapport.dvi +^Z +zsh: suspended xdvi rapport.dvi +chaland ~ $ bg +[1] + continued xdvi rapport.dvi +chaland ~ $+ +
+^Z
est un signal intercepté par le shell, qui suspend
+l'exécution du programme sans détruire le processus correspondant. Les
+calculs déjà effectués par ce programme ne sont pas perdus. Dans l'exemple
+précédent, si on demande à un xdvi
suspendu de changer de page
+(SPC
), il ne le fera pas, mais il se souviendra de le faire dès
+qu'il aura à nouveau accès aux ressources de l'ordinateur.
+À partir de l'état suspendu, on peut faire passer un programme :
+
fg
;bg
.+Son exécution reprend alors là où on l'avait laissée. +
+ +
+Quand il n'y a qu'un seul programme en arrière-plan dans le terminal
+courant, on peut le faire passer au premier plan en tapant fg
.
+Cela permet en particulier d'interrompre son exécution grâce à
+^C
, que la plupart des programmes comprennent.^C
+n'affecte que l'éventuel unique programme qui tourne au premier plan dans le
+terminal où il est tapé. Quand il y en a plusieurs, c'est un peu plus
+compliqué, mais c'est bien sûr possible.
+
+Vous pouvez pratiquer ^C
, ^Z
, fg
,
+bg
de façon visuelle et didactique en lançant la commande
+
xdaliclock -seconds -geometry 500x100+0+0 -font BUILTIN+ +
+et en observant attentivement les secondes (pensez à en laisser +quelques-unes s'écouler). Vous remarquerez que ce programme finit la +transition en cours avant de se remettre à l'heure. +
+ ++Résumé : +
+ +^Z
le suspend ;^C
l'interrompt.fg
le passe au premier plan ;bg
le passe en arrière-plan.fg
le passe au premier plan ;
+La commande ps
montre où en sont les tâches de fond :
+
+chaland ~ $ ps
+ PID TT STAT TIME COMMAND
+ 4450 p9 S 0:00 /usr/local/bin/lcsh
+ 4782 p9 S 0:02 cc -o grosprogramme grosfichier.c
+ 4841 p9 R 0:00 ps
+
+
+ps
affiche la liste des processus que vous avez lancés :
+
PID
(process identificator) : c'est le numéro du
+processus.
+TT
: indique le terminal dans lequel a été lancé le processus.
+Un point d'interrogation signifie que le processus n'est attaché à aucun
+terminal (par exemple les démons).
+STAT
: indique l'état du processus :
+R
: actif ( running)S
: non activé depuis moins de 20 secondes
+ (sleeping)I
: non activé depuis plus de 20 secondes (idle)T
: arrêté (suspendu)Z
: zombieTIME
: indique le temps machine utilisé par le programme (et
+non pas le temps depuis lequel le processus a été lancé !).
+
+La commande ps
a différentes options, dont les suivantes :
+
a
(all) : donne la liste de tous les processus, y
+compris ceux dont vous n'êtes pas propriétaire.
+g
(global, général...) : donne la liste de tous les processus
+dont vous êtes propriétaire.
+u
(user, utilisateur) : donne davantage
+d'informations (nom du propriétaire, heure de lancement, pourcentage de
+mémoire occupée par le processus, etc.).
+x
: affiche aussi les processus qui ne sont pas associés à un
+terminal.
+w
: le tronque pas à 80 caractères (peut être utilisée plusieurs fois pour tronquer plus loin)
+
+ps agux
est en fait souvent utilisé pour avoir des informations sur
+tout les processus.
+
+La commande top
affiche les mêmes informations, mais de façon
+dynamique : elle indique en fait par ordre décroissant le temps machine des
+processus, les plus gourmands en premier. C'est rigolo quand la machine rame,
+et c'est très instructif sur les processus gourmands en ressources...
+
+Les programmes ont tous une commande spécifique pour les quitter
+(q
, menu où cliquer, etc). C'est seulement dans le cas où vous
+ne parvenez pas à les quitter correctement, pour une raison ou une autre,
+que vous pouvez avoir besoin de tuer le processus.
+
+Avant toute chose, essayez de taper ^C
ou ^D
. Si
+cependant ça ne marche pas, utilisez la commande kill
(plus le
+numéro du processus).
+
+chaland ~ $ ps + PID TT STAT TIME COMMAND + 4450 p9 S 0:00 /usr/local/bin/lcsh + 4782 p9 S 0:02 cc -o grosprogramme grosfichier.c + 4841 p9 R 0:00 ps +chaland ~ $ kill 4782 +chaland ~ $ ps + PID TT STAT TIME COMMAND + 4450 p9 S 0:00 /usr/local/bin/lcsh + 4851 p9 R 0:00 ps+ +
+kill -9
tue le processus à tous les coups. Vous ne pouvez tuer que
+les processus dont vous êtes propriétaire. Il convient de ne l'utiliser que
+si aucune autre méthode ne marche, car dans ce cas le programme n'a aucun
+moyen de faire quoi que ce soit avant de mourir.
+
+La possibilité d'exécuter plusieurs commandes à la fois (et aussi sur +plusieurs machines) pose un problème immédiat de coexistence pacifique. Ce +n'est pas gentil de lancer tous ses programmes de calcul lourds sur la +machine d'un copain et partir en vacances le weekend : il peut arriver (et il +est arrivé) qu'il ne puisse même plus se connecter. Voilà quelques outils +pour vivre paisiblement : +
+ +nice
exécute un programme à priorité plus basse (faire
+man nice
).
+limit
commande interne du shell, permet de limiter les
+ressources à disposition de votre processus (très utile typiquement avec
+maple
ou autres applications gourmandes en mémoire) (faire
+man csh
, man zshbuiltins
).
+