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
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 ownerPID
: numéro du process%CPU
: cputime/realtime percentage%MEM
: % mémoire occupéeSIZE
: Virtual image size; size of text+data+stackRSS
: Resident set size; kilobytes of program in memoryTTY
: terminal contrôlant le processSTAT
: statusSTART
: date de départPR
: prioritéLIB
: nombre de pages mémoire occupées par les bibliothèquesSHARE
: quantité de mémoire partagée
- 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
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.
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
- 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 .
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 |
