Signaux & processus



--Téléchargez Signaux & processus en PDF --


Les Processus

Un Processus :  un processus est un programme en cours d’exécution. La particularité d’un processus est de s’exécuter avec les droits accordés à l’utilisateur qui a lancé la commande. Ceci participe fortement à la sécurité du système. Ainsi, si un utilisateur contracte un programme malveillant (un virus par exemple), le processus sera soumis au droit d’accès de cet utilisateur, et ne pourra pas effectuer des opérations non autorisées (comme par exemple modifier le fichier de mots de passe).

Au démarrage de l’ordinateur, le système charge le noyau Linux qui se charge de l’initialisation du matériel et de la détection des périphériques. Ceci fait, il démarre ensuite le processus init qui a comme particularité d’être le premier processus et de toujours utiliser le PID 1. Ce processus démarre ensuite des processus noyaux (dont le nom est noté entre crochets), et les premiers processus systèmes.

Chaque processus a ainsi un père (sauf init), et peut être à son tour le père d’autres processus, etc.

Un Daemon : un processus démon est simplement un processus qui s’exécute en arrière-plan. L’acronyme Disk And Execution MONitor (moniteur de disque et d’exécution) a été inventé pour justifier le terme daemon après qu’il soit devenu populaire.

Lors de l’exécution d’un programme, le processus reçoit un PID, une sorte d’identifiant unique. Un processus aura parfois besoin d’un autre processus pour exécuter une certaine tâche, celui-ci recevra alors en plus de son PID un PPID (Processus Parent ID). De plus, un processus possède un propriétaire (UID) et un groupe propriétaire (GID) qui déterminent le droit d’accès aux ressources.

Donc, chaque processus a un père : le processus qui l’a lancé. Sauf un qui déroge à la règle, tout simplement parce qu’il est le premier à être lancé et qu’il sera également responsable de l’arrêt du système. Ce processus si particulier s’appelle init. Comme il est le premier à apparaître sur le système, son PID est égal à 1.

Le tableau ci-dessous résume les principales caractéristiques d’un processus sous Linux :

PID

Identificateur numérique unique de chaque processus. Ceux-ci sont affectés par le système en ordre croissant.

PPID

PID du père du processus. Par défaut, tous les processus ont un père. Il n’existe que 2 exceptions :

le processus init qui est le premier lancé

les orphelins, c’est-à-dire les processus dont le père est mort. Ils sont le plus souvent récupérés par init

Mode d’exécution

Le mode d’exécution est représentatif de l’état du processus, plusieurs modes sont possibles :

Etat du processus – Le premier champ :

R = runnable        prêt à être exécuté (Le processus est actif et exécute des instructions de type utilisateur)

S = sleeping          Endormi

D = Dying             sommeil  ininterruptible (habituellement parce qu’il est occupé sur un périphérique d’entrée-sortie)

T = traced             arrêté ou suivi (Le processus a été stoppé par l’envoi du signal stop, par exemple « CTRL-Z »)

Z = zombie           Zombie (defunct), un processus zombie est achevé, mais conservé dans la table des processus, car son père (encore actif) ne lui a pas envoyé s’instruction wait ou waitpid. Un processus Zombie n’utilise pas de ressources système, mais « spame » la table des processus.

Etat du processus – Le second champ

W            le processus n’a pas de pages résidentes (il est dans la swap)

<             Processus avec un haut niveau de priorité

N             Processus avec un faible niveau de priorité

L             Processus bloqué en mémoire (pour des applications en temps réelles et paramétrage de périphérique d’Entrée/sortie)

Quelques commandes utiles

ps :  Permet de lister les processus actifs. Souvent utilisé avec l’argument -a pour obtenir le PID.

pstree : Permet de visualiser les processus sous forme d’arborescence.

top : Permet de voir les processus et leur consommation de resources.

kill : Permet de tuer un processus. Il faut fournir en paramètre le signal à envoyer, suivi du PID du processus cible.