Cours processus-script LINUX
A- LES PROCESSUS LINUX
a) processus :
un programme écrit en langage évolué est compile pour produire un code objet, puis après
l’édition des liens un code exécutable (binaire: machine) est produit il suffit de le charger
par le loader dans une zone mémoire pour que le CPU l’exécute. Ce programme est
mémoire et en exécution est appelé processus (un thread est une partie du processus qui
est en exécution). Un processus est tout programme lacé pour réaliser un job spécifique.
Chaque processus possede un numéro ID appelé PID (Procès ID)
Les ID commencent de 1 à 65535. Un processus dispose d'un processus père que l'on
appelle le PPID (Parent PID). La particularité d'un processus est de s'exécuter avec les
droits accordés à l'utilisateur qui la lancé. Au démarrage de l'ordinateur, le système
démarre le processus init qui a comme particularité d'être le premier processus et de
toujours utiliser le PID 1. Chaque processus a ainsi un père (sauf init), et peut être à son
tour le père d'autres processus, etc.
La commande pstree permet de visualiser l'arbre des processus. L'option -p permet de
visualiser les PID de chaque processus. Dans le cas de système multi tâches, plusieurs
programmes (plusieurs processus); sont execute par le CPU en temps partagé (on à
l’impréssion que c’est en mçeme temps) : le processeur (CPU) le processeur est allouée à
un processus en mémoire pendant une certaine durée. Les autres processus sont mit en
attente.
Résumé :
Un numéro (son PID, Process ID, « identifiant du processus »),
Un numéro de son processus parent (PPID, Parent Process ID, « identifiant du
processus parent ») celui à partir duquel il a été lancé. (celui qui l'a crée...),
Un numéro utilisateur, de groupe, la durée de traitement, sa priorité d'exécution, la
référence à son répertoire de travail.
Il existe par conséquent un processus au sommet de l'arborescence, l'équivalent de la racine
pour les systèmes de fichiers appelé : init , qui possède toujours le numéro 1 ; il est le père de
tous les processus; la commande « pstree » permet d’afficher l’arborescente des processus
en cours d’exécution par leurs nom.
1. Le processus appelé « login », est responsable d’ouverture de votre session .
2. Le processus bash ( votre shell) est le fils de votre login (attente d'une commande),
3. Lorsque vous tapez une commande, celle ci lance un nouveau processus, dont votre
bash est le père.
un processus peut être dans l'un des états :
Enseignants: Sehad-Guerrout-Khelouat page 1
Cours processus-script LINUX
Le schéma précédant montre qu’un nouveau processus (programme en cours d’exécution)
commence par être en état « prêt » à etre exécuté. Quant le système lui alloue le processeur,
alors il devient « actif » ; lors de son exécution s’il lui manque une ressource donnée, alors il
passe à l’état « bloqué ». Quant la ressource demandée est libérée alors le processus qui l’a
demandée revient à l’état « prêt » c'est-à-dire il attend son tour d’allocation de processeur, et
sa continue jusqu’au sa fin, où il passe à l’état « terminé ».
Un processus peut passer par plusieurs états sous plusieurs événements tels que :
allocation de ressources
élu par l'ordonnanceur
le processus revient d'un appel système ou d'une interruption
le processus a fait un appel système ou a été interrompu
se met en attente d'un événement
l'événement attendu est arrivé
suspendu par un signal SIGSTOP
réveillé par le signal SIGCONT
fin d’exécution
Pour résumer, un processus peut être en plusieurs états :
1. R : actif : En cours d’exécution (le processus est actif et consomme des ressources),
2. S : En sommeil (le processus n’est pas actif mais susceptible d’être réveillé par un
appel système)
3. T : Stoppé ou suspendu (Le processus a reçu un signal d’arrêt temporaire),
4. Z : Zombie (a pris fin sans libérer ses ressources).
5. I : inactif (attente).
Enseignants: Sehad-Guerrout-Khelouat page 2
Cours processus-script LINUX
Les différents types de processus :
Il existe 3 Types de processus
1. Les processus interactifs : exécutés à partir d'un terminal où l'entrée provient
de l'entrée standard (Clavier) et la sortie s'effectue par la sortie standard
(Ecran).
2. Les processus batch : exécutés de façon séquentielle.
3. Les démons : processus en perpétuelle exécution en attente d’une requête des
autres processus, par exemple : programme mail, ftp, web…etc.
Commandes de contrôle des processus
Les commandes les plus usuelle pour le contrôle des processus sont :
ps afficher les informations sur processus.
kill envoyer un signal au processus.
nohup rendre le processus non sensible à la déconnexion.
fg mettre le processus en avant-plan.
bg mettre le processus en arrière-plan.
jobs connaitre les commandes qui tournent en arrière plan.
État des processus
ps : process status : Afficher les processus dans le terminal courant.
Les Options :
-A (All) tous les processus.
-e tout les processus à l'exception des processus noyau.
-u affiche les propriétés de chaque processus (utilisateur et heure de lancement)
-l affichage long ( toutes les informations sont affichées : PID,PPID,PRI…etc)
-f affiche les processus parents (PPID)
-x visualise tous les processus actifs de l'utilisateur courant (y compris ceux qui ne
sont pas liés à un terminal ;
Note : Pour visualiser toutes les informations sur les processus en utilise ps avec
l’option –u.
$ps -u
USER PID %CPU %MEM SZ RSS TTY STAT ENG TIME COMMAND
Enseignants: Sehad-Guerrout-Khelouat page 3
Cours processus-script LINUX
temps de calcul n° de processeur
Taille en mémoire
en % (sur machine
de travail
Consommation (Résident Set Size) multiprocesseurs)
mémoire
propriétaire
du processus Taille du processus
(mémoire virtuelle
consommée)
$ps –fux
Permet d’afficher les informations détaillées des processus et compris : tree (arbre)
$ps -fux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 9.7 0.1 8580 5636 pts/1 Ss 17:52 0:00 \init
User1 9711 6.8 0.4 78228 19216 ? Rl 17:52 0:00 \_login
user1 9713 9.7 0.1 8580 5636 pts/1 Ss 17:52 0:00 \_
bash
user1 9755 0.0 0.0 4084 1008 pts/1 R+ 17:52 0:00 \_ ps
Ici on voit que l'utilisateur (user1) a lancé un processus console (et dont le PID est 9711), qui a lancé en cascade
un processus bash. Dans ce bash (l'interpréteur de ligne de commande), on a lancé la commande "ps " .
Les signaux
Un certain nombre d’événements (erreur, <ctrl c>,…) peut être signalé à un processus à l’aide
d’un signal. Ce mécanisme permet la communication interprocessus, notamment entre le
système d’exploitation et le processus. Les principaux signaux sont :
Numéro Nom Signification
1 SIGHUP Arrêt
2 SIGINT Interruption
9 SIGKILL Terminaison (non ignoré)
15 SIGTERM Fin de programme
24 SIGSTOP stopper l’exécution
Par exemple :
Enseignants: Sehad-Guerrout-Khelouat page 4
Cours processus-script LINUX
Si vous lancez une commande et que vous tapez les touches CTRL-Z, le processus
en cours recevra le signal numéro 24 (SIGSTOP) et stoppera son exécution.
Une déconnexion provoquera l’envoi du signal 1 (SIGHUP) à tous les processus.
Lorsque vous tapez CTRL-C, vous envoyez un signal 2 (SIGINT) au processus
courant.
Pour envoyer un signal à un processus on utilise la commande :
: $kill -n°_signal <liste-PID> ;
La commande killall : permet de tuer un processus en indiquant le nom du processus au lieu
d'indiquer le PID
Exemple 1:
kill 2010 Tuer le processus N° 2010
kill -9 2010 Forcer la terminaison, intéressante pour cas d’un processus bloqué ;
killall –i grep :Tue tous les processus qui contiennent la commande grep.
l'option "-i" qui vous demande une confirmation avant de tenter d'arrêter un processus.
Les tâches de fond
L’exécution de certaines commandes monopolisent le terminal et ne rendent pas la main. Pour
Lancer les commandes en arrière-plan, $commande& exemple : vi &.
On peut rendre un processus s’exécutant en background( arrière plan ) en: $fg
Pour rendre un processus en arrière plan on utilise la commande : $bg
La commande « jobs » :permet de visualiser la liste des processus en arrière plan ;
Exemple :
1. Lancer l’éditeur vi : $vi
2. faire l'association des deux touches [CTR] et [Z] : ce ci permit de rendre le
processus vi en arrière plan, alors on peut récupérer le shell : $
3. On peut vérifier que le processus vi est toujours en cours (par la commande
ps).
$ps
5432 tty1 vim
4. De même, la commande jobs permet d’afficher les processus s’exécutant en
arrière plan :
$ jobs
[1]+ stoped vim
5. Pour récupérer le vi ; exécuter la commande fg :
$fg 1
Processus non sensible à la déconnexion
Quand on ferme la session (exit, [Ctrl] D...), le signal 1 SIGHUP est envoyé à tous les
processus attachée à l’utilisateur pour qu’ils se terminent aussi.
Lorsqu’un processus long est lancé et que l’utilisateur veut quitter le shell, ce traitement sera
alors arrêté et il faudra tout recommencer. Le moyen d’éviter cela est de lancer le processus
de manière que la fermeture de session n'entraine pas l'arrêt du processus ; Ce ci est possible
grâce à la commande « nohup » No hang up.
Enseignants: Sehad-Guerrout-Khelouat page 5
Cours processus-script LINUX
La syntaxe est comme suit :
$nohup commande & : la sortie de la commande est dirigée vers le fichier
[Link]
$nohup commande > myfile & : la sortie de la commande est dirigée vers le
fichier myfile.
Exemple :
$ nohup ftp [Link] >/dev/null &
$exit
Ceci permet de lancer un téléchargement (commande ftp) vers le serveur
1cpi de site ESI.
Une telle tâche reste en cours d’exécution même après la fermeture de
session.
Après avoir reconnecté, ce processus ne sera attaché à une console donnée
alors quant on visualise les processus en cours d’exécution ( ps –u) noter que
le tty ? .
B- LES SCRIPTS LINUX
Un script prmet d’exécuter plusieurs comandes
automatiquement :
Esemple : créer un fichier [Link] et mettez les attributs en eecutable.
#!/bin/sh
clear
ls -al
puis exécuter :
$ ./[Link]
“;“……permet d’enchainer les commandes
“&“ …….en fin de commande permet d’exécuter cette commande en tache de fond.
“&&“……permet d’exécuter la deuxième commande si la première est exécutée sans erreurs :
commande1 && commande 2
“||“……... mis entre deux commandes permet d'exécuter la deuxième commande si et seulement si la
première commande a renvoyé une erreur. commande_1 || commande_2
Les caractères “&>“ permettent de rediriger la sortie d'une commande ainsi que les erreurs éventuelles
dans un fichier : commande &> fichier
“$“…… désigne l'invocation d'une variable
Les quottes doubles " permettent d'ignorer tout caractère spécial à l'intérieur des deux
Enseignants: Sehad-Guerrout-Khelouat page 6
Cours processus-script LINUX
signes sauf le $, le \ et le `
Les="ont trop de travail"
Deux="Les candidats $Les"
echo $Deux
-> Les candidats ont trop de travail
Les côtes inversés ` sont utilisées pour forcer l'exécution de la commande sur la ligne de commande elle
même
Un=`pwd`
echo $Un
/home/1cpi/travail/
Les interpréteurs de commande Linux distinguent deux type de variables :
Les variables simples et les variables d'environnement :
Les variables d'environnement ont la particularité d'être connues de toutes
commandes lancées depuis l'interpréteur de commande courant. L'affectation
de variable se fait comme suit :
variable=«variable»
export variable=«variable» permet de transformer la variable en
variable d’environnement ou par export variable
export affiche toutes la variables d’environnement.
Set affiche toutes les variable : environnement et simple
Unset variable detruire la variable.
Plusieurs variable d’environnement sont définits au démarrage dans
/etc/profile.
Ou dans ~/.bash_profile
Rendre exécutable avec chmod puis l’exécuter avec ./ monscript
$? Code retour de la dernière commande exécutée
$$ PID du shell actif
$PPID ID du process père.
$! PID du dernier processus lancé en arrière plan
#!/bin/bash préciser quel shell va exécuter le script
$0 nom de la commande du script
$1-9 les neuf paraletres passés au script
$# nombre total de parametres passés au script
$* liste de tous les parametres au format « $1 $2 $3… »
Enseignants: Sehad-Guerrout-Khelouat page 7