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 @@ + + + + +Processus + + + +

Les processus sous Unix

+ +
+

+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. +

+
+ +

Mettre un processus en tâche de fond

+ +

+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. +

+ +

background et foreground

+ +

+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 : +

+ + + +

+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é : +

+ + + + +

Voir les processus

+ +

+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 : +

+ + + +

+La commande ps a différentes options, dont les suivantes : +

+ + + +

+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... +

+ + +

Tuer les procesus

+ +

+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. +

+ + +

Contrôle des ressources

+ +

+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 : +

+ + + +
+Dernière modification le 2002-11-23. +
+ + +