Vous êtes sur la page 1sur 5

La gestion des processus sous LINUX

Nous avons plusieurs fois dans ce qui prcde fait usage du terme processus sans vraiment le
dfinir. Dans ce chapitre, nous nous proposons de prciser cette notion et d'tudier (d'un point de
vue externe, pour le moment) un certain nombre de principes qui la rgissent et les commandes
principales correspondantes.

A. Qu'est-ce qu'un processus ?


Dans tout ce qui suit, nous appellerons processus (ou tche) toute excution d'un programme
un instant donn, le programme constituant en lui-mme un objet inerte, rang sur disque sous la
forme d'un fichier ordinaire excutable. On peut ce stade distinguer deux types de processus:

les processus systme qui ne sont attachs aucun terminal, qui sont crs au lancement
du systme ou des dates fixes par l'administrateur du systme; les premiers ne sont
interrompus qu' l'arrt du systme (citons le swapper, un certain nombre de processus
dits dmons comme, par exemple, le processus assurant le bon usage de l'imprimante en
spoule ou le processus cron, qui permet de lancer des tches une date donne) ;

les processus lancs par un utilisateur particulier, depuis un terminal donn ou une date
donne. En particulier, le fait de se loguer sur un terminal, sous une identification donne,
provoque le lancement d'un processus correspondant l'excution d'un programme
dtermin l'avance pour chaque utilisateur (une rfrence du fichier contenant le
programme excuter est donne dans le fichier systme /etc/passwd). Il s'agit presque
toujours d'un processus correspondant l'excution d'un interprteur de langage de
commandes commme par exemple le Bash.

Le lancement d'un processus suppose par consquent le chargement en mmoire centrale ( partir
du disque) du programme correspondant en vue de son excution. La majorit des programmes
Linux sont rentrants, c'est--dire que si plusieurs utilisateurs demandent l'excution d'un mme
programme, une seule copie du programme est place en mmoire centrale, le systme assurant
pour chacun des processus correspondants la gestion d'une zone de donnes propre chacun et
le bon droulement de chacun des processus (sauvegarde de registres en particulier). L'diteur de
liens de LINUX (commande ld) fournit ou non (selon les options) des modules excutables
rentrants (zone instructions protge en criture).
Un processus possde un certain nombre de caractristiques:

une identification (un nombre entier) ;

un propritaire (en fait il y en a deux, qui sont des entiers) ;

un groupe propritaire (galement deux entiers) ;

un terminal d'attachement ;

un certain nombre d'autres attributs (comme par exemple la priorit ou le rpertoire de


travail) sur lesquels nous reviendrons ultrieurement.

B. Lister les processus actif : ps


Tout utilisateur a la possibilit de connatre la liste des processus qui sont attachs son terminal
un instant donn, ainsi que les caractristiques de ces processus, au moyen de cette commande.
L'exemple suivant illustre cette commande pour un utilisateur qui vient de se loguer:

Il est possible d'avoir de plus amples informations sur les processus en utilisant des options. Par
exemple:

Petite dfinition de chaque partie du rsultat:

User: le propritaire du processus, en gnral l'utilisateur qui a lanc le processus ;

PID: le numro d'identification unique du processus. Sont attribus dans l'ordre de


lancement des processus. Quand ils atteignent 30.000 ou plus, le nombre recommence 0.
Les numros de 0 5 sont gnralement des processus de bas niveau du systme
d'exploitation qui ne peuvent tre tus ;

%CPU: pourcentage du temps de CPU consacr l'excution de ce processus ;

%MEM: pourcentage de mmoire totale utilise par ce processus ;

VSZ: superficie totale de la mmoire virtuelle, en blocs de 1k ;

RSS: taille relle de l'ensemble, le chiffre exact de la mmoire physique alloue ce


processus ;

TTY: terminal associ ce processus. Le point d'interrogation indique que le processus


n'est reli aucun terminal ;

STAT: code d'tat du processus. Les diffrents tats sont S - repos, R - excution (sur file
d'attente), Z - zombie, N - tche de faible priorit ;

START: lorsque le processus a t lanc, ceci indique en heures et minutes depuis quand le
programme a t lanc, ou indique depuis combien de jours le processus est lanc si
ilfonctionne depuis plus d'une journe ;

TIME: temps CPU utilis par le processus depuis le dbut du lancement ;

COMMAND: le nom de la commande.


Il y a aussi ps -ef qui est quivalent ps aux mais qui a l'avantage de fonctionner sur
les versions POSIX qu'on trouve sur les autres systmes Unix.

C. Interrompre un processus
Les processus peuvent tre, en gnral, interrompus par l'envoi d'un signal depuis le terminal.
L'mission de ce signal est provoque par la frappe de caractres particuliers que nous dsignerons
par CTRL + C. Ce signal pour effet d'interrompre tous les processus attachs au terminal depuis
lequel il est mis, sauf demande expresse formule par le processus comme nous le verrons.
Un certain nombre de processus n'acceptent pas les interruptions par ces signaux. C'est le cas, par
exemple, des processus associs au Shell, dont on ne peut sortir depuis le terminal que par CTRL
+ D (indiquant par l la fin des donnes interprter). Nous verrons plus loin comment forcer
l'interruption de processus de ce type et, par ailleurs, comment crer soi-mme des tches ayant
ces proprits.

D. La redirection des fichiers standards


Les processus fournissant des rsultats (par exemple ls, who ou ps) les crivent sur la sortie
standard qui est, par dfaut, physiquement associe au terminal de lancement du processus (un
fichier spcial /dev/tty"numro du terminal"). De faon analogique, les processus ayant besoin de
donnes extrieures, en cours d'excution (par exemple mail, write ou sh) les lisent sur l'entre
standard galement associe par dfaut ce terminal. Il est possible d'affecter ces fichiers d'entre
et de sortie standards d'autres dispositifs que la console qui contrle le processus. Ce fichier peut
tre un autre fichier spcial ou un fichier ordinaire; la seule contrainte est que l'utilisateur ait

l'autorisation d'criture ou de lecture (suivant le cas) sur ledit fichier. La redirection de la sortie
standard d'une commande dans un fichier rpond la syntaxe commande > rfrence. Si le
fichier existe, il est pralablement supprim.

Il est galement possible d'ajouter des rsultats d'un processus la fin d'un fichier (donc sans
effacement de son contenu antrieur) par des commandes de la forme commande >>
rfrence comme l'illustre l'exemple suivant:

On constate que la redirection de la sortie standard est sans aucun effet sur le droulement du
processus. De fait, lors de l'apparition d'une erreur, le message d'erreur n'est pas envoy sur cette
sortie, mais un autre fichier standard appel sortie d'erreur standard galement associe de
manire standard au terminal. Il est possible de rediriger cette sortie peu prs de la mme
manire que la commande prcdente commande 2 > rfrence ou commande 2 >>
rfrence.
On peut, de mme, rediriger l'entre standard d'un processus o sont lues les donnes. Cette
redirection rpond la syntaxe commande < rfrence.

E. Processus parallles et communication


Pour continuer ce premier contact avec l'univers LINUX, nous montrons quelques autres possibilits
supplmentaires communes aux diffrents langages de commandes. Ainsi il est tout d'abord
possible d'enchainer deux ou plusieurs processus de faon totalement indpendante et en
squence, le droulement du premier n'influant pas sur celui du second qui est lanc la fin de son
excution.

Les enchanements de commandes que nous venons de voir ont deux caractristiques essentielles:

Ils sont squentiels, c'est--dire qu'une commande n'est lance (et le processus associ
cr) que lorsque la prcdente est termine; il n'y a aucun paralllisme dans l'excution.
Eventuellement, comme c'est le cas des diffrents Shell, un processus en lance un autre et
est suspendu jusqu' la fin du processus qu'il a lanc.

Les processus sont totalement indpendants, c'est--dire que le droulement de l'un ne


dpend pas de celui des prcdents. Il n'y a aucun change d'informations entre les
diffrents processus.

F. Lancer un processus en arrire-plan


Les utilisateurs disposent d'un mcanisme leur permettant de lancer un certain nombre de
processus de faon concurrente (en quelque sorte paralllement) et communiquant entre eux par
l'intermdiaire de tubes (pipes), le systme assurant la synchronisation de l'ensemble des
processus ainsi lancs. Le principe gnral de fonctionnement est assez simple: la sortie standard
de chaque processus pip (except le dernier) est redirige sur un tube et l'entre standard du
processus suivant est redirige sur ce tube, si bien que les donnes d'un processus sont
constitues par les rsultats du prcdent dans la liste des processus donns. Examinons sur un
exemple simple ce qui se passe exactement:

La commande grep permet de rechercher une chane de caractres dans un fichier. La


commande ps aux | grep pts/0 entrane la cration de deux processus concurrents, les rsultats du
premier (correspondant la commande ps aux) tant envoys sur un tube. C'est au niveau du tube
que le second processus (correspondant la commande grep pts/0) prend ses donnes, plutt
qu'au clavier. La sortie standard du processus ps aux a t redirige sur le tube et l'entre
standard du processus grep pts/0 galement. Le systme assure la synchronisation de l'ensemble
dans le sens o:

Il suspend le processus lecteur dans le tube lorsque le tube est vide;

Il suspend le processus crivain dans le tube lorsque le tube est plein.

Sur ce dernier exemple vous avez pu voir l'existence effective des deux processus (le
processus ps aux et le processus grep pts/0).

G. Lancer un processus en mode dtach


Une autre facilit particulirement intressante qui est offerte aux utilisateurs est la possibilit de
lancer des processus en mode batch: ces processus sont dits en arrire-plan ou background et
sont tels que le processus Shell qui les cre reprend son excution aprs les avoir crs sans
attendre leur achvement. Ce mcanisme permet ainsi un mme utilisateur de lancer depuis un
seul poste de travail plusieurs tches diffrentes: c'est, avec le mcanisme dcrit prcdemment,
une seconde illustration de l'aspect multitches du systme pour chaque utilisateur. Il faut
cependant tre conscient que ce procd au demeurant fort agrable (en effet rien n'est plus
pnible que de lancer la compilation d'un programme et de ne pouvoir utiliser son terminal durant
toute cette compilation) conduit souvent surcharger le systme et par consquent cette facilit
doit tre utilise bon escient.
Nous donnons ci-dessous un exemple de cration d'un tel processus en arrire-plan correspondant
au dmarrage de l'diteur de texte gedit. Le caractre & qui suit la commande indique que le
processus cr doit l'tre en arrire plan.

Le systme rpond en indiquant le numro du processus cr. Il faut savoir qu'un tel processus a
les mmes sortie standard et sortie erreur standard que le processus qui le cre: ainsi en mode
standard, les rsultats ventuels sont affichs sur l'cran. Il est possible (et fort agrable) d'utiliser
les redirections pour ces processus. Par ailleurs les processus ainsi dtachs ne sont plus sous le
contrle direct de la console, en ce sens qu'ils ne peuvent plus lire de donnes au clavier du
terminal. Leur entre standard doit tre redirige, faute de quoi elle sera redirige par dfaut sur le
fichier spcial de rfrence absolue /dev/null qui est, en quelque sorte, un puits sans fond o les
utilisateurs peuvent envoyer tout ce dont ils ne veulent pas. Ces processus ne peuvent, par
ailleurs, plus tre interrompus par le signal correspondant CTRL + C dont nous avons parl un
peu avant.

H. Interruption de processus, le retour


L'interruption des processus lancs en background (ce qui est galement vrai pour ceux qui ne le
sont pas) peut tre ralise de diffrentes manires:

soit en se dloguant (c'est--dire en signalant au Shell principal du terminal la fin des


donnes par la squence CTRL + D) cela a pour effet d'interrompre la session de travail
sur le terminal et, par voie de consquence, tous les processus lancs depuis ce terminal
(nous verrons plus tard qu'un signal particulier nomm SIGHUP est alors adress tous les
processus attachs au terminal) ;

Soit en lanant un processus d'interruption destination du processus vis; nous verrons


galement plus tard qu'un certain nombre de signaux peuvent provoquer l'interruption d'un
processus. Les signaux sont identifis par des nombres (le signal correspondant CTRL +
C vaut 2). Signalons ds maintenant qu'il en est un qui ne peut, en aucun cas, tre ignor
par les processus et constitue donc une arme absolue contre les processus indsirables: il
s'agit du signal 9 (SIGKILL). Un signal peut tre adress directement un processus au
moyen de la commande kill. On lui fournit, en arguments, le numro du signal et
l'identification du processus destinataire. La commande ps est alors particulirement utile
pour retrouver le numro d'un processus.

La commande kill -9 IDProcessus permet, en toutes circonstances un utilisateur de tuer un


processus de numro donn depuis n'importe quel terminal; cela est particulirement important
lorsqu'on a perdu pour une raison ou une autre la main son terminal et que le signal
correspondant la squence CTRL + C sont sans effet; il est alors ncessaire d'envoyer ce signal
d'interruption depuis une autre console. La seule contrainte ce niveau est que l'on ne peut
envoyer un signal un processus que si l'on en est le propritaire ( moins d'tre le superutilisateur).
Pour terminer, signalons que le fait de se dloguer avant l'achvement des processus lancs depuis
un terminal en background provoque l'interruption de ces processus (par l'mission d'un signal
particulier que nous verrons plus tard). Pour viter ce phnomne, il existe une
commande nohup qui permet aux processus lancs d'ignorer le signal SIGHUP prcdent. Ainsi la
commande nohup prog "donnees" resultats& peut tre lance juste avant de se dloguer. Il
s'agit du lancement en background du processus correspondant l'excution du programme de
rfrence prog prenant ses donnes dans le fichier de rfrence "donnes" et crivant ses rsultats
dans le fichier de rfrence "rsultats". Le fait de se dloguer n'interrompt alors plus le processus.