,

Gestion des processus

Ce qui est désigné comme processus est une instance de programme s'exécutant à un instant donné ainsi que son contexte (ou environnement). Ce dernier terme désigne l'ensemble des ressources utilisées par le programme pour pouvoir se dérouler comme par exemple la mémoire ou les fichiers ouverts.


Etats de processus:
  • running (actif)
  • sleeping (prêt)
  • idle (attente)
  • zombi
PID=Process Identifier héritage
init : PID=1

commandes de monitoring
ps liste les processus
top suivi de l'évolution des processus
pstree liste les processus dans un arbre indiquant les liens de parentés
jobs liste les procesus lancés dans le shell courant

La commande ps voir man ps
ps : liste des processus que l'on a lancé
ps auxw|more : liste de tous les processus (ax) avec nom user (u)
ps axl|more : liste longue (l)
ps ax|grep sendmail : teste si le daemon sendmail tourne
ps auxr : liste les processus actifs (running)
ps axf|more : liste avec la filiation (f) des processus
ps axl --sort:-rss|more : liste avec tri par RSS ( Resident set size; kilobytes of program in memory) décroissants

Exemple de liste:

$ps aux USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND daemon 317 0.0 0.3 788 396 ? S Mar 17 0:00 /sbin/portmap daemon 407 0.0 0.3 840 416 ? S Mar 17 0:00 /usr/sbin/atd lp 340 0.0 0.5 1504 760 ? S Mar 17 0:01 lpd MAIN morel 1451 0.0 0.9 1900 1248 1 S 12:11 0:00 -bash morel 1467 0.0 0.5 1920 668 1 S 12:13 0:00 xinit /u1/morel/.xini morel 1478 0.0 0.8 1868 1116 1 S 12:13 0:02 fvwm95 morel 1482 0.0 0.6 1564 784 1 S 12:13 0:00 /usr/X11R6/lib/X11/fv morel 1483 0.0 0.6 1588 804 1 S 12:13 0:00 /usr/X11R6/lib/X11/fv
  • USER : nom du owner
  • PID : numéro du process
  • %CPU : cputime/realtime percentage
  • %MEM : % mémoire occupée
  • SIZE : Virtual image size; size of text+data+stack
  • RSS : Resident set size; kilobytes of program in memory
  • TTY : terminal contrôlant le process
  • STAT : status
  • START : date de départ

  • PR : priorité
  • LIB : nombre de pages mémoire occupées par les bibliothèques
  • SHARE : quantité de mémoire partagée
Status STAT d'un processus:
R : runnable
S : sleeping
D : uninterruptible sleep
T : stopped or traced
Z : zombie process
SW : sleeping and no resident pages
N en 3e position indique une nice value >0 (Champ NI)


Envoi de signaux aux processus

Commande kill -l permet de lister les signaux disponibles
max@linux-pc:~> kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

Principaux signaux
Signal
Valeur numérique
Description
SIGINT
2
Il s'agit d'une demande venant du clavier, le plus souvent à l'aide la combinaison de touches Ctrl-C.
SIGKILL
9
Ce signal permet d'arrêter tout programme car il ne peut être géré différemment que le comportement par défaut. L'arrêt du programme est brutal.
SIGUSR1
10
Ce signal n'a pas de signification particulière. Il peut être utilisé de manière différente par chaque programme.
SIGSEGV
11
Ce signal est envoyé à un programme lorsque qu'il tente d'accéder à un endroit invalide en mémoire.
SIGUSR2
12
Identique à SIGUSR1.
SIGTERM
15
Si le programme n'a pas prévu de gérer ce signal, l'arrêt sera aussi brutal que pour SIGKILL. Mais comme le comportement par défaut peut être changé, le programme a la possibilité de réaliser des opérations avant de se terminer.
SIGCHLD
17
Envoyé à un processus dont un fils est arrêté ou terminé.
SIGCONT
18
Permet de faire se continuer un processus qui avait été arrêté par exemple à l'aide de SIGSTOP (voir ci-après).
SIGSTOP
19
Ce signal demande au processus de suspendre son exécution. Comme SIGKILL, ce signal ne peut être géré différemment.
SIGTSTP
20
Mets un processus en ettent (=Ctrl+Z).

L'exemple :
# kill -9 3289
# kill -SIGTSTP 'seq 1256 1280' # PID compris entre 1256 et 1280

Il existe 5 modes d'exécution d'une commande sous Linux :

  • Le mode interactif (foreground)
Le plus couramment utilisé.
Pendant l'exécution de la commande, l'utilisateur ne peut plus utiliser le temrinal pour lancer une autre commande. Le contrôle n'est restitué à l'utilisateur qu'à la fin de l'exécution de la commande.
A tout moment, il est possible d'interrompre la commande en utilisant la combinaison de touches <ctrl-c> ou de la suspendre <ctrl-z>
  • Le mode en arrière-plan (background)
Permet de rendre immédiatement le contrôle à l'utilisateur.
La commande est lancée suivie du caractère '&'
  • Le mode différé
permet de déclencher l'exécution d'une comande à une date fixée (commande 'at')
  • Le mode batch
Permet de placer une commande dans une file d'attente. Le système exécute toujours la commande placée en tête dans la file d'attente.
  • Le mode cyclique
permet d'effectuer des commandes répétitives à dates et heures fixes (sauvegardes journalières par exemple)


Le shell utilisé le plus fréquemment sur les systèmes GNU/Linux, bash, propose un système de contrôle des jobs.
Un job correspond à une tâche demandée par l'utilisateur.
Cette tâche peut être composée de plusieurs processus.

La commande jobs -l permet de lister les jobs en cours.

Un job peut être dans 3 états :
avant-plan (foreground) : le job s'exécute et on n'a pas la main
arrière-plan (background) : le job s'exécute et on a la main
suspendu (suspended) : le job est en attente, il ne s'exécute pas
On peut faire passer un job d'un état à un autre :
  • suspendre un job s'exécutant en avant plan : <ctrl-z>
  • suspendre un job s'exécutant en arrière plan : kill -STOP %numéro_du_job
  • faire passer en avant-plan un job s'exécutant en arrière plan : fg %numéro_du_job
  • l'inverse : <ctrl-z>, puis bg %numéro_du_job
  • faire passer en avant-plan un job suspendu : fg %numéro_du_job
  • faire passer en arrière-plan un job suspendu : bg %numéro_du_job


Détachement
Suite au l'héritage, chaque processus initié par shell est "attaché" à son terminal d'origine (TTY).
La commande disown PID fait le détacher.
On peut alors fermer la session sans pour autant arrêter le processus.

Modification des priorités
échelle de priorités : -20 à +19 ou -20 est la priorité la plus haute.
processus de l'user > 0, admin < 0, par defaut - 10 .

Commandes nice et renice
nice
-n X
Permet d'affecter une priorité aux processus dès leur lancement
permet d'ajuster la priorité par défaut à N
renice
-u User
Permet de modifier la priorité d'un processus alors que celui-ci est déjà lancé
change la priorité de tous les processus d'un utilisateur