Vous êtes sur la page 1sur 9

CH.

5 SYSTME UNIX PROCESSUS


5.1 L'arborescence des processus : ps 5.2 La communication avec l'extrieur 5.3 La communication par tubes 5.4 Le lancement en arrire-plan 5.5 Le signal kill

Info S4 ch5 1

5.1 L'arborescence des processus : ps Un programme est statique : c'est un fichier. L' excution d'un programme lance un processus. Les processus sont crs, dtruits, communiquent. Des processus en crent d'autres, en tuent d'autres. Les processus sont identifis par un numro. Au dmarrage du systme est cr le processus 0 (l'ordonnanceur) ; celui-ci cre le processus 1 (init) ; l'init cre (entre autres) un processus par terminal ; lorsque le terminal est sous tension se cre le processus login ; lorsque l'utilisateur se loge, se cre (entre autres) un processus bash. La commande ps permet de connatre les processus et leur statut. Par dfaut, on ne voit que les processus lancs partir de la fentre courante ; -A provoque l'affichage de tous les processus, -u nom_d'utilisateur tous ceux de l'utilisateur. Les options u et l spcifient un format de sortie.
Info S4 ch5 2

[desar@localhost desar]$ ps --help ********* simple selection ********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session leaders -U by real user ID (supports names) -d all except session leaders -g by session leader OR by group name -e all processes -p by process ID T all processes on this terminal -s processes in the sessions given a all w/ tty, including other users -t by tty g all, even group leaders! -u by effective user ID (supports names) r only running processes U processes for specified users x processes w/o controlling ttys t by tty *********** output format ********** *********** long options *********** -o,o user-defined -f full --Group --User --pid --cols -j,j job control s signal --group --user --sid --rows -O,O preloaded -o v virtual memory --cumulative --format --deselect -l,l long u user-oriented --sort --tty --forest --version X registers --heading --no-heading ********* misc options ********* -V,V show version L list format codes f ASCII art forest -m,m show threads S children in sum -y change -l format -n,N set namelist file c true command name n numeric WCHAN,UID -w,w wide output e show environment -H process heirarchy

Info S4 ch5 3

[desar@localhost desar]$ ps -A l F UID PID PPID PRI NI VSZ 100 0 1 0 0 0 1148 040 0 2 1 0 0 0 040 0 3 1 0 0 0 040 0 4 1 0 0 0 040 0 5 1 0 0 0

RSS 492 0 0 0 0

WCHAN schedu interr schedu kpiod schedu

STAT S SW SW SW SW

TTY ? ? ? ? ?

TIME 0:04 0:00 0:00 0:00 0:00

COMMAND init [kflushd] [kupdate] [kpiod] [kswapd]

utilisateur

numro

numro du pre

tat

origine

temps

nom

Extrait du rsultat de la commande : tous les processus n'ont pas t conservs ; seules les colonnes indiques ont t retenues. tat du processus : R : prt, T : suspendu, S ou I : endormi, Z : termin. On peut reconstituer l'arborescence des appels de processus.
Info S4 ch5 4

[desar@localhost UID PID PPID 0 1 0 0 2 1 0 3 1 0 4 1 0 5 1 0 436 1 0 441 436 501 451 441 501 488 451 501 489 451 501 490 451 501 491 451 501 506 451 501 509 1 501 510 489 501 511 510 501 571 489 501 579 571 501 580 579 501 581 579 501 582 579 501 583 579 501 584 579 501 586 511

desar]$ ps -A l STAT TTY TIME COMMAND S ? 0:04 init SW ? 0:00 [kflushd] SW ? 0:00 [kupdate] SW ? 0:00 [kpiod] SW ? 0:00 [kswapd] S ? 0:00 /etc/X11/prefdm -nodaemon S ? 0:00 -:0 S ? 0:01 kwm S ? 0:01 kpanel S ? 0:01 kfm S ? 0:00 krootwm S ? 0:00 kbgndwm S ? 0:00 knotes -knotes_restore S ? 0:00 kcmlaptop -daemon S ? 0:02 konsole -icon konsole.xpm -mini S pts/0 0:00 /bin/bash R ? 0:19 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice S ? 0:00 /usr/local/Office51/bin/soffice R pts/0 0:00 ps -A l

Info S4 ch5 5

Chaque processus occupe diverses rgions en mmoire (texte, donnes, pile, tas), pouvant tre dplaces par dbordement (swap, repr par W). Dans une autre rgion se trouve le bloc de contrle du processus, comprenant des informations sur l'tat, l'adresse mmoire, le CPU, les paramtres du processus. Le systme maintient une table des processus, contenant les blocs de controle des processus et pour chacun une zone (zone U) contenant des donnes ncessaires pendant l'excution (fichiers ouverts par le processus, paramtres, valeurs de retour, catalogue de travail).

Info S4 ch5 6

5.2 La communication avec l'extrieur Les processus communiquent avec l'extrieur au moyen de trois fichiers : stdin : entre standard ; stdout : sortie standard ; stderr : sortie erreur standard. (Ces trois noms sont dfinis dans stdio.h et peuvent donc tre utiliss dans un programme C.) Ces entres et sorties peuvent tre rediriges : < nom_de_fichier utilise nom_de_fichier la place de l'entre standard ; > nom_de_fichier utilise nom_de_fichier la place de la sortie standard, en crasant nom_de_fichier s'il existe dj ; >> nom_de_fichier utilise nom_de_fichier la place de la sortie standard, en crivant la suite, sans craser. De mme avec l'erreur standard : 2> et 2>>.
Info S4 ch5 7

Exemple de redirection de sortie :


[desar@localhost fichiers]$ ls -l total 2 -rw-rw-r-1 desar desar 10 avr -rw-rw-r-1 desar desar 10 avr [desar@localhost fichiers]$ ls -l > catalogue [desar@localhost fichiers]$ cat catalogue total 2 -rw-rw-r-1 desar desar 10 avr -rw-rw-r-1 desar desar 10 avr -rw-rw-r-1 desar desar 0 avr 6 17:07 bonjour 6 17:08 bonsoir

6 17:07 bonjour 6 17:08 bonsoir 6 17:09 catalogue

On peut ainsi concatner des fichiers :


[desar@localhost fichiers]$ cat bonjour bonsoir > salutations [desar@localhost fichiers]$ cat salutations Bonjour ! Bonsoir !

La redirection de l'entre permet de mettre dans un fichier ce qu'une commande attend qu'on tape au clavier.

Info S4 ch5 8

On peut enchaner des commandes sur une mme ligne en les sparant par des points-virgules :
[desar@localhost fichiers]$ date; who; ps jeu avr 6 17:11:53 CEST 2000 desar :0 Apr 6 16:37 PID TTY TIME CMD 511 pts/0 00:00:00 bash 612 pts/0 00:00:00 ps

Les commandes sont mises entre parenthses si l'on veut rediriger toutes leurs entres-sorties :
[desar@localhost fichiers]$ (date; who; ps) > fichier

Une redirection utile est /dev/null. Il s'agit d'un "trou noir". On peut, par exemple, viter tous les messages d'erreur provoqus normalement par une commande avec la redirection 2> /dev/null.

Info S4 ch5 9

5.3 La communication par tubes Souvent, on enchane des processus dont le second utilise comme entre la sortie du premier, etc. Par exemple, find . affiche la liste de tous les fichiers et rpertoires partir du rpertoire courant ; grep txt retourne toutes les lignes de l'entre standard contenant la chane txt ; sort retourne toutes les lignes de l'entre standard ordonnes par ordre alphabtique. Si l'on dsire afficher, classs par ordre alphabtique, les noms de fichiers et rpertoires contenant la chane txt, il faut enchaner les commandes prcdentes en redirigeant leurs entres et sorties.
Info S4 ch5 10

On peut viter de crer des fichiers temporaires en reliant les commandes par des tubes (pipes), matrialiss par la barre verticale |. On aurait, pour le cas prcdent : find . | grep txt | sort. Par exemple, avec ls et wc
[desar@localhost bonjour bonsoir [desar@localhost [desar@localhost 5 [desar@localhost bonjour bonsoir catalogue salutations toto [desar@localhost 5 -w,

qui compte le nombre de mots :


toto

fichiers]$ ls catalogue salutations fichiers]$ ls > toto fichiers]$ wc -w < toto fichiers]$ cat toto

fichiers]$ ls | wc -w

Tout se passe comme si des fichiers temporaires taient crs.


Info S4 ch5 11

En fait, les processus qui communiquent sont crs simultanment et chacun attend un signal du prcdent pour se rveiller. D'o le rsultat inattendu suivant (la commande wc -l compte le nombre de lignes du fichier en entre) :
[desar@localhost fichiers]$ ps PID TTY TIME CMD 511 pts/0 00:00:00 bash 636 pts/0 00:00:00 ps [desar@localhost fichiers]$ ps | wc -l 4

Ceci est confirm par les commandes suivantes (sleep cre un processus dormant pendant un temps fix).
[desar@localhost fichiers]$ sleep 20 | sleep 30 F UID PID PPID PRI NI VSZ RSS WCHAN 000 501 511 510 9 0 2172 1256 wait4 000 501 645 511 7 0 1188 436 nanosl 000 501 646 511 9 0 1188 436 nanosl 000 501 647 511 11 0 2520 848 | ps STAT S S S R l TTY pts/0 pts/0 pts/0 pts/0 TIME 0:00 0:00 0:00 0:00 COMMAND /bin/bash sleep 20 sleep 30 ps l

Info S4 ch5 12

Une commande utile est de crer un tube sur le filtre more, qui dcoupe le fichier d'entre en pages tenant dans la hauteur de la fentre de shell. Par exemple, si on a beaucoup de fichiers, ls -l | more. Ceci, avec le grand nombre de commandes disponibles en shell, permet de traiter efficacement la plupart des problmes courants.

Info S4 ch5 13

5.4 Le lancement en arrire-plan On peut lancer des commandes en arrire-plan. Elles sont alors dtaches (statut D). Le shell courant n'en attend pas la terminaison. On peut aussi se dloger. Ces commandes continuent tre actives. Attention par consquent ne pas lancer en arrire-plan des processus qui bouclent ! Ceci est obtenu en faisant suivre la commande d'un esperlute &. On obtient en rponse le numro du processus dtach :
[desar@localhost fichiers]$ find / -name desar > ouestdesar 2> /dev/null & [1] 551

Voici quel est alors l'tat des processus actifs (noter le rsultat de l'option u) :

Info S4 ch5 14

[desar@localhost fichiers]$ ps u USER PID %CPU %MEM VSZ RSS TTY desar 511 0.0 1.0 2268 1292 pts/0 desar 514 4.4 24.5 43976 31388 ? desar 529 0.0 24.5 43976 31388 ? desar 530 0.0 24.5 43976 31388 ? desar 531 0.0 24.5 43976 31388 ? desar 532 0.0 24.5 43976 31388 ? desar 533 0.0 24.5 43976 31388 ? desar 536 0.0 24.5 43976 31388 ? desar 551 2.8 0.4 1292 524 pts/0 desar 552 0.0 0.6 2520 872 pts/0

STAT S S S S S S S S D R

START 21:19 21:19 21:19 21:19 21:19 21:19 21:19 21:20 21:29 21:29

TIME 0:00 0:25 0:00 0:00 0:00 0:00 0:00 0:00 0:00 0:00

COMMAND /bin/bash /usr/local/Offi /usr/local/Offi /usr/local/Offi /usr/local/Offi /usr/local/Offi /usr/local/Offi /usr/local/Offi find / -name des ps u

Les processus en arrire-plan n'ont plus d'entre standard. Par contre, leurs sorties standard par dfaut sont toujours le terminal (s'il existe) ; il est impratif de les rediriger pour obtenir des rsultats.

Info S4 ch5 15

5.5 Le signal kill Le systme communique sans cesse avec les processus au moyen de signaux. Les processus aussi envoient des signaux. Ces signaux peuvent galement tre entrs par l'utilisateur au moyen de la commande kill. Les processus endormis se rveillent lorsqu'ils reoivent un signal et ragissent en fonction de celui-ci. Ils peuvent tre protgs contre tel ou tel signal. Il est un signal qu'ils ne peuvent ignorer qui est kill -9 numro_de_processus. Ce signal intime au processus dont le numro est donn de s'interrompre. Le signal kill -9 ne peut tre envoy qu' un processus dont l'utilisateur est propritaire. Ce signal tue le processus indiqu et (gnralement) tous ses descendants.

Info S4 ch5 16

Pour les processus actifs ouverts dans une fentre, la commande ^C fonctionne en gnral. Par contre, kill -9 est la seule faon de tuer un processus lanc en arrire-plan :
[desar@localhost fichiers]$ find / -name desar > ouestdesar 2> erreur & [1] 648 [desar@localhost fichiers]$ ps PID TTY TIME CMD 511 pts/0 00:00:00 bash 648 pts/0 00:00:00 find 649 pts/0 00:00:00 ps [desar@localhost fichiers]$ kill -9 648 [desar@localhost fichiers]$ ps PID TTY TIME CMD 511 pts/0 00:00:00 bash 650 pts/0 00:00:00 ps [1]+ Processus arrt find / -name desar >ouestdesar 2>erreur

Il est possible d'interrompre ainsi n'importe quel processus appartenant l'utilisateur. Dans les cas graves (impossibilit d'ouvrir une nouvelle fentre car interface graphique bloque par exemple), on a toujours la ressource
Info S4 ch5 17

de se loger sur un autre terminal ou de se loger dans la fentre de shell d'un autre utilisateur au moyen des commandes login nom_d'utilisateur ou su nom_d'utilisateur. Chacune de ces commandes ouvre (dans des circonstances un peu diffrentes) une session au nom d'un autre utilisateur. Une fois dans une autre session, la commande ps -u nom_d'utilisateur permet de trouver le numro du processus bloquant et de le tuer. Le cas chant, tuer son processus de login. Mais tuer le pre d'un processus en arrire-plan ne tue pas celui-ci ; il a le processus 1 comme nouveau pre.

Info S4 ch5 18