GESTION DES PROCESSUS &
PLANIFICATION DES TACHES
ADMINISTRATION LINUX
Plan:
Définition
Généalogie d’un processus
Processus de démarrage
États d’un processus
Interface d’un processus
Caractéristiques d’un processus
Communication interprocessus par signaux
Vérification et surveillance des processus
"Tuer" un processus
Backgroung, foreground, jobs
Modification des priorités
Le processus init
Automatisation des tâches
Définition
Un Unix est une machine généralement pseudo
multi-tâches - Chaque tâche est appelée
processus - le processeur s'occupe tour a tour
d'exécuter une partie d’un processus, durant un
temps donné (quantum).
Au démarrage de la machine, un processus père de
tout le monde est lancé: init (numéro 1).
A partir des informations contenues sur le disque
de boot le processus init lance d'autres processus
pour mettre en route les services disponibles sur la
machine.
Généalogie d’un processus
• Les processus des utilisateurs sont lancés par un
interpréteur de commande (shell). Ils peuvent eux même
lancer ensuite d’autres processus.
• Ces processus doivent ensuite pouvoir communiquer
entre eux
• Le processus créateur = le père
• Les processus crées = les fils
Processus de démarrage
États d’un processus
Unix est un système multi-tâche préemptif
Un processus est une abstraction d’un programme en
cours d’exécution
Un processus c’est: programme + espace mémoire ( +
d'autres ressources)
Un processus a plusieurs états possibles
nouveau en exécution stoppé
prêt En attente (suspendu)
terminé
Les Zombies
☞ Dans les applications importantes, un processus joue le rôle de
superviseur et c’est lui qui active les autres processus.
☞ Quand ces derniers meurent, le noyau Linux conserve leur code
retour pour qu’il soit disponible au superviseur.
☞ Ces processus sont alors dans l’état « Zombie ».
☞ Ils n’utilisent plus de ressources systèmes (CPU, mémoire) mais ils
occupent encore chacun une entrée dans la table des processus.
☞ Il est impossible de les tuer.
☞ Normalement ils disparaissent quand le superviseur lit leur code
retour.
☞ Ils peuvent saturer le système.
Interface d’un processus
stdout
stdin processus
stderr
Tout processus Unix, dès son lancement, possède 3 fichiers ouverts :
L’entrée standard (stdin ou fichier &0)
La sortie standard (stdout ou fichier &1)
La sortie erreur (stderr ou fichier &2)
Caractéristiques d’un processus
PID (Process IDentification) c’est l’identifiant d’un processus.
PPID (Parent PID) c’est l’identifiant du père du processus.
PGID (Process Group IDentification) c’est l’identifiant d’un groupe de
processus.
Le PGID est partagé par tous les processus d’un service.
UID Le compte utilisateur sous lequel le processus s’exécute.
GIDs Le, ou les comptes groupe sous lesquels le processus s’exécute.
TTY Le terminal texte (TeleTYpe) auquel le processus est associé.
NICE Valeur modifiable qui intervient dans le calcul de la priorité.
COMMAND Corresponde au nom de l’exécutable.
Communication interprocessus
par signaux
Un processus peut envoyer un signal a un autre processus.
Il existe 63 signaux, numérotés de 1 a 63.
Un processus peut traiter un signal reçu, soit en l’ignorant soit en
déclenchant une action préprogrammée (le gestionnaire du signal).
La réception d’un signal non géré entraine la mort du processus.
Le signal numéro 9 ne peut être géré, il entraine obligatoirement la
mort du processus.
On ne peut envoyer des signaux qu’a ses propres processus
Seul root peut envoyer des signaux a des processus ayant un UID
quelconque.
Vérification et surveillance des
processus
Trois commandes permettent de visualiser les
processus :
La commande ps (process status) permet d’avoir des
informations sur les processus en cours. Lancée seule,
elle n’affiche que les processus en cours lancés par
l’utilisateur et depuis la console actuelle.
Vérification et surveillance des
processus
Visualisation statique : ps
-e (affichage de tous les processus) et -f (affichage détaillée)
Avec ps –ef on obtient par exemple :
L’option a affiche les processus pour tous les utilisateurs.
L’option x affiche les processus sans terminal.
L’option u affiche en regard de chaque processus le nom de
l’utilisateur et son heure de lancement.
Vérification et surveillance des
processus
Visualisation arborescente : pstree
Cette présentation permet de voir plus facilement les
dépendances entre les processus.
Vérification et surveillance des
processus
Visualisation dynamique : top
Cette commande fournit également d'autres
informations (RAM, CPU, etc.).
La commande ps n’offre qu’un aperçu "instantané" du
système. Top fournit un résumé mis à jour des processus
actifs et de leur utilisation en ressources.
Le résultat de la commande peut être assez long (en
fonction des processus ouverts) et sachez que la commande
ne retourne pas au prompt (arrêt de la commande par
[Ctrl] C).
Elle actualise la page toutes les dix secondes.
Vérification et surveillance des
processus
La commande lsof liste les fichiers ouverts et les
processus actifs .
Exemples:
lsof -i : indique les processus de type Internet.
lsof -i -a -p 1234 : tous les ports réseau ouverts par le
processus 1234 (-a est interprété comme l’opérateur ET).
"Tuer" un processus
La commande « kill » sert a communiquer avec des processus :
➢ arrêt de processus
➢ demande au processus de se reconfigurer
➢ passage en mode verbeux du processus
➢ etc.
« kill » existe sur tous les Unix
2 syntaxes possibles :
➢ syntaxe numérique : « kill -9 2878 »
➢ syntaxe symbolique : « kill –KILL 2878 »
"Tuer" un processus
Un utilisateur ne peut arrêter que les processus dont il
est propriétaire c'est à dire qu'il a lancé.
Seul l'administrateur a le droit d'arrêter un processus
ne lui appartenant pas.
Exemples :
kill 321 (termine le processus)
kill –9 321 ("tue" le processus)
kill all nom_prog (arrête le programme)
"Tuer" un processus
L’option -l de kill permet d’obtenir la liste des signaux.
Exemple de signaux:
(SIGHUP): est envoyé par le père à tous ses enfants
lorsqu’il se termine.
(SIGINT): Interruption du processus demandé (touche
[Suppr], [Ctrl] C).
(SIGQUIT): Interruption du processus demandé avec
fichier de débuggage
(SIGKILL):Signal ne pouvant être ignoré, force le
processus à finir ’brutalement’.
(SIGTERM): Signal envoyé par défaut par la commande kill.
Demande au processus de se terminer normalement.
Modifications des priorités
Un processus Unix possede une priorite d’execution : son « nice
number »
−20 ≤ nice number ≤ 19
➢ −20 correspond a la priorite maximale
➢ 19 correspond a la priorite minimale
Un utilisateur peut descendre la priorite de ses processus.
Seul l’administrateur peut augmenter la priorite de n’importe quel
processus.
Pour lancer un processus a la priorite N (N pouvant etre negatif) :
➢ nice [N] commande
Une fois un processus demarre, on peut changer sa priorite par la
commande : «renice priorite PID »
Backgroung, foreground, jobs
Backgroung, foreground, jobs
CTRL Z Suspend la tache courante
jobs Affiche la liste des travaux
kill %n Arrête le travail « n »
fg %n Ramène le travail « n » en avant plan
bg %n Met le travail « n » en arrière plan
Backgroung, foreground, jobs
user@userlaptop:~$ sleep 100
^Z
[1]+ Stopped sleep 100
user@userlaptop:~$ Jobs
[1]+ Stopped sleep 100
user@userlaptop:~$ bg
[1]+ sleep 100 &
user@userlaptop:~$ jobs
[1]+ Running sleep 100 &
Backgroung, foreground, jobs
user@userlaptop:~$ ps
PID TTY TIME CMD
7173 pts/1 00:00:00 bash
7231 pts/1 00:00:00 sleep
7232 pts/1 00:00:00 ps
user@userlaptop:~$ kill 7231
[1]+ Complété sleep 100
user@userlaptop:~$ ps
PID TTY TIME CMD
7173 pts/1 00:00:00 bash
7233 pts/1 00:00:00 ps
Le processus init
Le démarrage de Linux :noyau
vers init
le noyau lance le programme /sbin/init, chargé de
terminer la séquence d'amorçage.
La configuration d'init se trouve dans /etc/inittab. Ce
fichier varie énormément d'une distribution à l'autre
mais globalement, les actions effectuées sont à peu
près les mêmes.
Le démarrage de Linux: configuration
de init
Sur une distribution compatible RedHat, il existe 7
runlevels :
0 - halt
1 - mode mono-utilisateur (dépannage)
2 - mode multi-utilisateurs sans les montages NFS
3 - mode multi-utilisateurs (texte)
4 - non utilisé
5 - mode multi-utilisateurs avec lancement de X11
(graphique)
6 - reboot
Le démarrage de Linux:init active
les services(1)
A chaque runlevel correspond un répertoire
/etc/rc.d/rcX.d ou X est le numéro du runlevel en question.
Ces répertoires contiennent des liens symboliques de la
forme:
<lettre><nombre><nom>
Ces liens pointent vers des scripts contenus dans
/etc/init.d/ qui permettent de lancer ou d'arrêter des
services.
Le démarrage de Linux:init active
les services(2)
La lettre peut être S (start) ou K (kill) et le nombre varie
entre 00 et 99.La lettre indique si le service doit être
démarré ou arrêté et le nombre détermine l'ordre des
actions.
Exemple : /etc/rc0.d/K20ssh -> /etc/init.d/ssh
Lors de l'arrêt, lorsque toutes les actions <20 sont faites,
init appelle :
/etc/init.d/ssh stop
Automatisation des tâches
cron
Le service cron permet la programmation d’événements
à répétition. Il fonctionne à l’aide d’une table, appelée
une crontab. C’est un fichier texte, éditable avec un
simple éditeur, par exemple vi. Pour modifier votre
crontab personnelle utilisez la commande crontab pour
éditer la table, avec le paramètre -e.
Les fichiers crontabs sont sauvés dans:/var/spool/cron.
cron
• Le service cron doit tourner pour que les crontabs
soient actives.
ps -ef|grep cron
• Le format d’un enregistrement de crontab est le
suivant :
Minutes Heures Jour du mois Mois Jour semaine Commande
• Crontab –l :liste les crontabs active
Définir une crontable personnelle
Un utilisateur crée un fichier particulier de requête
appelé crontable avec la commande crontab. Ce
fichier se placera dans le répertoire
/var/spool/cron/crontabs/ avec comme nom celui de
l’utilisateur.
# Exemple de tâche personnelle
00 08 * * * rm /tmp/.*.*p
at
La commande at et les commandes associées
permettent une gestion des traitements batchs.
Contrairement à la crontab les modifications sont
volatiles : elles sont perdues lorsque la session est
terminée. C’est à vous de placer la liste des commandes
dans un éventuel fichier et de les charger au besoin via
les scripts de votre profil.
at -f /home/user/test.sh 10:30
FIN