Retourner au contenu. Retourner à la navigation

 

Module 1

by admin @ 23/02/2006

Chapitre 08 - Gestion des processus

1. La vie d'un processus

Un processus durant tout sa vie évolue par états et ce jusqu'à sa mort. Les principaux états connus sont : l'état "actif", désigné comme tel lorsque le processus est pris en charge par le processseur, l'état "prêt", indiquant que le processus attend sa prise en charge par le processeur et l'état "attente" permettant au processus de se mettre en mode sommeil afin d'attendre l'arrivée d'un signal qui le passera à l'etat prêt. Il existe beaucoup d'autres états qui seront mis en évidence par l'utilisation de certaines commandes.

Une fois un processus lancé, le système lui affecte non seulement une identification numérique unique portant le nom de PID (Process Identifier) permettant de le reconnaître dans la masse des processus mais aussi un héritage. En effet lorsqu'un processus est lancé celui-ci fait partie d'une descendance, tout processus est le "fils","le petit fils" , ou "l'arrière petit fils" d'un processus parent dénommé "init". C'est le premier processus lancé par le système et c'est lui qui prend en charge l'exécution de l'ensemble des processus lancés par l'utilisateur par l'intermédiaire du shell (interpréteur de commande).

Ainsi le processus init a un pid égale à 1. De même qu'il existe des commandes indiquant l'état d'un processus, des commandes mettant en evidence l'arbre généalogique d'un processus existant.

Voyons un peu l'ensemble de ces commandes :


Commande

Description

ps

Permet de lister les processus suivant un certain nombre de critères

top

Permet d'avoir un suivi de l'évolution des processus et ce faisant, d'effectuer des traitements comme on pourrait le faire avec ps, mais de façon interactive

pstree

Permet de lister les processus dans un arbre indiquant les liens de parentés entre eux

jobs

Permet de lister les processus lancés dans le shell courant

Découvrons plus précisément les sorties des commandes ps et top qui sont similaires : elles possèdent des champs définis ainsi :


PID

Identifiant du processus

USER

Le propriétaire du processus

PRI

Priorité de la tâche (plus le chiffre est petit plus la tâche est prioritaire)

SIZE

Taille du processus en mémoire incluant la partie données et la pile

RSS

Quantité totale de mémoire occupée par la tâche (les bibliothèques chargées sont comptabilisées pour les programme ELF)

SHARE

Quantité de mémoire partagée

STAT

Ce champ identifie par des lettres les différents états possibles pour un processus

  • D : En sommeil imperturbable (ce qui arrive souvent à certain modules kernel)

  • R : En cours d'exécution

  • S : En sommeil

  • T : Stoppé ou stracé (notamment pour le débugage)

  • Z : Zombie (peut arriver lorsqu'un processus n'a pas attendu la fin de l'exécution de l'un de ses fils)

LIB

Nombre de pages occupées par les bibliothèques (sauf pour les exécutables au format ELF ; autant dire que ça ne fonctionne quasiment jamais)

%CPU

Taux d'occupation du(des) processeur(s) par ce processus. Il peut être supérieur à 100% dans le cadre de machine ayant plusieurs processeurs

%MEM

Taux d'occupation de la mémoire physique du processus

TIME

Temps total d'exécution au sein du(des) processeur(s) depuis le lancement du processus

COMMAND

Affiche la ligne de commande qui a permis de lancer le processus


2. Envoi de signaux aux processus

Ce procédé se concentre essentiellement autour de la commande kill. Il n'est pas, comme son nom pourrait le laisser supposer, dédié à tuer des processus. Il va permettre de faire effectuer un certain nombre de tâches à l'un ou plusieurs d'entres eux.

Tout dépend, finalement, de comment réagissent les programmes aux signaux qui leurs sont envoyés.

Pour obtenir la liste des signaux disponibles, il suffit de taper dans l'invite de commande du shell : kill -l

Voici dans un tableau les principaux signaux utilisés :


Nom du SIGNAL

Nombre

Description

SIGHUP

1

Ce signal est envoyé directement lors de la déconnection à un modem ou oblige un daemon à relire son fichier de configuration

SIGKINT

2

Ce signal est équivalent au Ctrl-C et met fin à l'exécution d'un processus

SIGKILL

9

Tue un processus de manière immédiate. Ce signal est à envoyé dans des mesures drastiques et ne peut être ignoré par le processus

SIGTERM

15

Termine un signal "proprement" si possible

SIGTSTP

18

Mets un processus en attente et , équivalent à Ctrl-Z


3. Arrière plan / Avant plan / Détachement

Lorsque vous lancez un programme, le shell prend en compte l'exécution du processus, ainsi il faut attendre la fin de celui-ci avant d'avoir à nouveau le prompt. On dit que le processus est en "Avant Plan" dans cet état il peut recevoir directement des signaux par les combinaisons de touches Ctrl-?. Il existe un autre mode dans lequel le processus est dit en "Arrière plan", contrairement au mode "Avant Plan" lors de l'exécution du programme, le shell affiche le prompt directement sans attendre la fin du processus. Afin de mettre le processus dans ce mode il suffit de placer un "&" à la fin de la commande, il est ainsi vu comme un job possédant un numéro, attaché au terminal (tty) ou pseudo terminal (pts/?) dans lequel il a été lancé. Dans cet état aucun caractère de contrôle (Ctrl-?) n'est possible.

Si nous nous trouvons dans les cas présentés plus haut, nous savons dès le départ dans quel mode nous voulons être, mais imaginons que l'on voudrait "switcher" d'un état à un autre. Des commandes ont été crées spécialement à cette effet.


Commande

Description

fg %N° de Job *

Permet de mettre un processus en avant plan

bg %N° de Job *

Permet de mettre un processus en arrière plan

Ctrl-Z

Permet de mettre un processus en attente

* : lorsque vous utilisez ces commandes et que vous avez mis un processus en attente, il met le processus dans l'état prêt et dans le mode pour lequel il a été crée.

Toutes les commandes que nous avons vues jusqu'à maintenant sont placées dans un mode d'arrière ou d'avant plan mais le processus est attaché à un terminal. Il existe un mode appélé mode de "détachement" où un processus n'est attaché à aucun terminal ou pseudo terminal. Généralement c'est le cas des daemon. On indentifie facilement un daemon par le champ TTY d'une sortie des commandes ps ou top ou il y a le symbole "?"

La commande permettant le détachement des processus est : disown et possède un paramètre qui est le PID du processus.

Exemple :

disown 1394

4. Modification des priorités du Scheduler

Nous avons vu en introduction que les processus avaient des priorités et qu'elles étaient modifiables. En effet les propriétés évoluent sur une échelle de -20 à +19. Tout processus, au lancement, peut avoir une priorité quelconque supérieure ou égale à zéro. Par contre un processus lancé par un utilisateur, à son exécution et durant celle-ci ne peut avoir une priorité négative. Seul l'administrateur système possède ce droit. Par défaut un processus est lancé avec la priorité 10.

les commandes permettant de contrôler les priorités des processus sont nice et renice.


Commande

Description

Options

nice priorité

Permet d'affecter une priorité aux processus dès leur lancement

-n N :permet d'ajuster la priorité par défaut à N

renice priorité

Permet de modifier la priorité d'un processus alors que celui-ci est déjà lancé

-u "User" :change la priorité de tous les processus d'un utilisateur

-p "PID" : change la priorité d'un processus ayant un pid précis

5. Planification de tâches

Il est possible de planifier des tâches sur linux afin que celles-ci s'éxécutent de manière répétitives ou différées. Pour cela deux daemons existent l'un crond qui est le daemon permettant d'éffectuer des tâches répétitives et le daemon atd destiné aux tâches différées. Chacun de ces deux daemons possèdent une commande en premier plan : crontab pour crond et at pour atd. Cependant beaucoup de ces commandes ne peuvent pas être utilisés par n'importe qui.

Pour gérer les accès à ces commandes, l'administrateur dispose de fichiers de permissions situés dans le répertoire /etc : cron.allow et at.allow qui definissent les autorisations et cron.deny et at.deny les refus.

Selon la présence ou l'absence de ces fichiers plusieurs règles rentrent en jeu :

  • Aucun des fichiers n'existe : dans ce cas seul root à le droit d'utiliser les commandes

    Note:
    dans le cas d'un système RedHat l'abscence des fichiers donne le droit à l'ensemble des utilisateurs d'utiliser les commandes
  • Les fichiers cron.allow et at.allow existent : les utilisateurs dont les noms sont présents sont abilités à exécuter les commandes

  • Les fichiers cron.deny et at.deny existent : les utilisateurs dont les noms sont présents ne peuvent exécuter les commandes les autres oui.

5.1 La commande crontab

Il est important de ne pas faire l'amalgame entre la commande crontab et le fichier crontab. La commande crontab permet de créer un fichier crontab possédant les différentes requêtes que l'utilisateur veut effectuer. Ce fichier porte le nom de l'utilisateur et est stocké dans le répertoire /var/spool/cron avant d'être exécuté par crond. Cette commande permet notament d'éditer le fichier et d'en supprimer le contenu.

Voici dans un tableau récapitulant les différentes options possibles:


Option

Définition

-u utilisateur

Installation du fichier crontab pour utilisateur (nécessaire d'être root pour l'utiliser)

-e

Modification du fichier crontab à l'aide de l'éditeur spécifié par les variables VISUAL ou EDITOR

-l

Liste le contenu du fichier crontab courant

-r

Elimination du fichier crontab courant

Le fichier crontab créé par l'utilisateur est composé de cinq champs marquant la périodicitété et la commande à effectuer. Ces champs sont ainsi définis:

Minute heure date mois "jour du mois" commande

La périodicité de chacun de ces 5 champs est représentée par des valeurs numériques comme ci dessous:

  • minutes (0-59)

  • heures (0-23)

  • date (0-31)

  • mois (1-12)

  • jour de la semaine (0-7)ou (0 ou 7 indique le Dimanche)

Vous pouvez affiner la notion de périodicité par l'utilisation de:

  • , : sépare plusieurs valeurs

  • - : marque une période (exemple: 1-7,du lundi au dimanche)

  • * : représente l'ensemble des valeurs possibles

  • / : permet de spécifier tous les x temps (exemple: */2 dans la colone des jours veut dire chaque 2 jours).

Note:
vous pouvez séparer les champs d'une entrée par des espaces simples, ou de tabulations.

5.2 Le fichier crontab système

Le fichier /etc/crontab est également lu par le daemon crond et est différent du format d'un fichier crontab ordinaire, en effet celui-ci possède des informations d'environnement qui précèdent généralement ses entrées (cela est aussi permis pour les fichiers crontab ordinaires mais ce n'est pas souvent utilisé). Après les cinq champs initiaux se trouve le nom d'un utilisateur pour lequel la commande doit être appelée.

Ce fichier est généralement utilisé pour appeler les scripts contenus dans les répertoires "cron.periode" se situant dans le répertoire /etc,énumérés ci-dessous :

  • /etc/cron.hourly

  • /etc/cron.daily

  • /etc/cron.weekly

  • /etc/cron.* répertoire contenant les exécutables

L'autre différence du fichier système crontab est qu'il fait appel à une commande particulière : run-parts. Cette commande prend en argument un nom de répertoire et appelle tous les programmes compris dans ce répertoire (le programme run-parts se trouve dans /usr/bin et n'est accompagné d'aucune documentation en ligne).

Voici un exemple de fichier /etc/crontab:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/bin:/usr/sbin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Ainsi, chaque matin, à 4:02, tous les scripts (ou programmes du répertoire /etc/cron.daily sont exécutés. Le répertoire cron.daily est créé lors de l'installation de votre distribution et contient des scripts servant à mettre à jour les bases de données slocate et whatis, à nettoyer les répertoires temporaires et à exécuter d'autres tâches de maintenance.

5.3 La commande at

at est un outil pratique pour planifier un seul évènement futur, et son utilisation est très simple:

Exemple :

luser@localhost $ at 6:00 ;
mail joe < joe.msg

Beaucoup d'autres commandes utilisent le daemon atd :

  • la commande atq (pour at queue, la file d'attente de at), fournit une liste des travaux at actuellement en cours. Tout utilisateur privilégié (root) peut entrer un nom d'utilisateur comme argument pour obtenir les travaux en cours d'autres utilisateurs.

  • la commande atrm est utilisée pour éliminer les travaux at en cours. L'atJobID s'affiche lorsque le travail est soumis ainsi qu'à la demande de la commande atq. Tout utilisateur privilégié peut éliminer les travaux at d'autres utilisateurs en fournissant le nom d'utilisateur (user ID) de ceux-ci.

Les commandes peuvent être indiquées (une par ligne), en terminant l'entrée par Ctrl-d seul, sur sa propre ligne.

Par admin Dernière modification 22/03/2007 15:52
Navigation
Actualités
23/06/2008 Opération du libre à Nantes !
23/06/2008 OpenSuse 11
18/06/2008 Firefox 3 !
09/06/2008 Linux Pratique Essentiel
08/06/2008 Ordinateurs vendus avec gNewSense
Plus d'actualités...
Articles
22/05/2008 Première approche de Qmail
19/05/2008 Test de la distribution Elive 1.0 Gem
14/05/2008 GNUPG introduction à la cryptographie et utilisation de GnuPG
21/02/2008 GNU / Screen
03/09/2007 The Linux File System Encryption API
More articles
Tips
28/04/2008 Mozilla Firefox : Google Talk et Facebook Chat
22/04/2008 Sed : Rechercher du texte entre deux chaines de caractères
04/04/2008 Gérer son(ses) écran(s) avec xrandr
26/03/2008 Tips sur l'historique de vos commandes
13/02/2008 Linux-Unix Cheat Sheets
More tips
Codes
09/04/2008 Chapitre 13 - Administration DNS et DHCP
09/04/2008 Chapitre 06 - Service web avec Apache
04/04/2008 Chapitre 09 - PureFTPd
04/04/2008 Chapitre 06 - Scripting Bash
01/04/2008 Chapitre 20 - Haute Disponibilité
More codes
Courses
13/09/2006 Module 3
23/02/2006 Module 2
23/02/2006 Module 1
More courses
Formation Linux

Supinfo Training Center has the first Linux Certification. The training is 13 days and allow you to pass the LPI 101 and 102.

more info
 
 
Vous êtes ici :
Cours Module 1 Chapitre 08 - Gestion des processus