Vous êtes sur la page 1sur 61

UNIVERSITE HASSAN II DE CASABLANCA

FACULTE DES SCIENCES Ben M’sik


Département De mathématique et
informatique

MODULE :
SYSTÈME D’EXPLOITATION 2

FILIÈRE : SMI/S4
Pr Nawal SAEL

Année universitaire : 2021/2022

1
Descriptif du module
Structure du module:
▪ Gestion des processus et de la mémoire
▪ Notion de base sur les SE
▪ Gestion des processus
▪La Programmation Shell
▪ Introduction
▪ Les variables
▪ Les structures conditionnelles
▪ Les boucles

Volume horaire :

Cours 12 Séances
TD-TP 14 Séances
Rappel sur les Systèmes d’Exploitation
Un système d'exploitation est un programme qui sert comme
intermédiaire / interface entre un utilisateur d'un ordinateur et le
matériel informatique.

L’objectifs du système d'exploitation:


• Contrôler / Exécuter des programmes / Application
utilisateur.
• Rendre le système informatique facile à utiliser.
• Utilisez le matériel informatique de manière efficace.
56
Rappel sur les Systèmes d’Exploitation
Rôle de l’OS : les fonctions essentielles

• cacher la complexité sous une interface «plus jolie»


• fournir certains services de base aux applications
• IHM, stockage persistant, accès internet, gestion du temps
• permettre la portabilité des programmes
• pouvoir lancer un même exécutable sur différents matériels

• partager chaque ressource entre les applications


• exploiter «au mieux» les ressources disponibles
• assurer la protection des applications (et du système)
56
Rappel sur les Systèmes d’Exploitation

Le système d’exploitation permet aux applications :


• d’utiliser les ressources matérielles de la machine ;
• d’ordonner leurs exécutions les unes par rapport aux autres (éviter
l’occupation du processeur par une application endormie, définir des
priorités),
• de gérer des droits (exécution, lecture) à des fin de sécurisation et de
communiquer :
• par l’intermédiaire de la mémoire vive,
• par l’intermédiaire de la mémoire persistante (disque),
• par des structures had hoc (files de messages, sémaphore pour la
synchronisation, etc).

56
Rappel sur les Systèmes d’Exploitation
Structure d’un SE ( Point de vue de l’interface présentée à l’utilisateur et
au programmeur) :

• Noyau et utilitaires
• Gestionnaire des tâches
• Gestionnaire de la mémoire
• Gestionnaire des fichiers
• Gestionnaire de périphérique
• Chargeur du système d’exploitation
• Interpréteur de commande

56
Rappel sur les Systèmes d’Exploitation
Le noyau :
• Le système d’exploitation comporte un certain nombre de routines (sous-
programmes). Les plus importantes constituent le noyau (kernel en anglais).
• Il est chargé en mémoire vive à l’initialisation du système et contient de
nombreuses procédures nécessaires au bon fonctionnement du système. Les autres
routines, moins critiques, sont appelées des utilitaires.
• Ce noyau d’un système d’exploitation se compose de quatre parties principales :
les gestionnaire de tâches (ou des processus), de mémoire, de fichiers et de
périphériques d’entrée-sortie.
• Il possède également deux parties auxiliaires : le chargeur du système
d’exploitation et l’interpréteur de commandes.

56
Rappel sur les Systèmes d’Exploitation
Le gestionnaire des tâches :

Sur un système à temps partagé, l’une des parties les plus importantes du
système d’exploitation est le gestionnaire de tâches ou ordonnanceur (Sur
un système à un seul processeur, il divise le temps en laps de tps).

Périodiquement, le gestionnaire de tâches décide d’interrompre le


processus en cours et de démarrer (ou reprendre) l’exécution d’un autre, soit
parce que le premier a épuisé son temps d’allocation du processus soit qu’il
est bloqué (en attente d’une donnée d’un des périphériques).

Le contrôle de plusieurs activités parallèles est un travail difficile. C’est


pourquoi les concepteurs des systèmes d’exploitation ont constamment, au
fil des ans, amélioré le modèle de parallélisme pour le rendre plus simple
d’emploi.
56
Rappel sur les Systèmes d’Exploitation

Le gestionnaire de la mémoire :

La mémoire est une ressource importante qui doit être gérée avec prudence.

La gestion de la mémoire est la tâche du gestionnaire de mémoire. Celui-ci


doit connaître les parties libres et les parties occupées de la mémoire, allouer
de la mémoire aux processus qui en ont besoin, récupérer la mémoire
utilisée par un processus lorsque celui-ci se termine et traiter le va-et-vient
(swapping en anglais) entre le disque et la mémoire principale lorsque cette
dernière ne peut pas contenir tous les processus.

56
Rappel sur les Systèmes d’Exploitation

Le gestionnaire des fichiers :

Une des tâches fondamentales du système d’exploitation est de masquer les


spécificités des disques et des autres périphériques d’entrée-sortie et d’offrir
au programmeur un modèle agréable et facile d’emploi. Ceci se fait à travers
la notion de fichier.

56
Rappel sur les Systèmes d’Exploitation

Le gestionnaire de entrées sorties :

Le contrôle des périphériques d’entrée-sortie (E/S) de l’ordinateur est l’une


des fonctions primordiales d’un système d’exploitation. Ce dernier doit :

Envoyer les commandes aux périphériques, intercepter les interruptions, et


traiter les erreurs.

Fournir une interface simple et facile d’emploi entre les périphériques et le


reste du système qui doit être, dans la mesure du possible, la même pour tous
les périphériques, c’est-à-dire indépendante du périphérique utilisé.

Le code des entrées-sorties représente une part importante de l’ensemble


d’un système d’exploitation.
56
Rappel sur les Systèmes d’Exploitation
Le chargeur du SE :

En général, de nos jours, lorsque l’ordinateur (compatible PC ou Mac) est


mis sous tension, il exécute un logiciel appelé BIOS (pour Basic Input
Output System) placé à une adresse bien déterminée et contenu en mémoire
ROM. Ce logiciel initialise les périphériques, charge un secteur d’un disque,
et exécute ce qui y est placé.

Lors de la conception d’un système d’exploitation, on place sur ce secteur le


chargeur du système d’exploitation ou, plus exactement, le chargeur du
chargeur du système d’exploitation (ou pré-chargeur) puisque le contenu
d’un secteur est insuffisant pour le chargeur lui-même.

La conception du chargeur et du pré-chargeur est indispensable, même si


ceux-ci ne font pas explicitement partie du système d’exploitation.
56
Rappel sur les Systèmes d’Exploitation

L’interprêteur de commande :

Le système d’exploitation proprement dit est le code qui permet de définir les
appels système.

Les programmes système tels que les éditeurs de texte, les compilateurs, les
assembleurs, les éditeurs de liens et les interpréteurs de commandes ne font
pas partie du système d’exploitation. Cependant l’interpréteur de commandes
(shell en anglais) est souvent considéré comme en faisant partie.

Sous sa forme la plus rudimentaire, l’interpréteur de commandes exécute une


boucle infinie qui affiche une invite (montrant par là que l’on attend quelque
chose), lit le nom du programme saisi par l’utilisateur à ce moment-là et
l’exécute.
56
L’ORDONNANCEUR
 Détermine l’ordre et la durée d’exécution des tâches.
 Dispatching: le dispatcheur commence et arrête une
tâche.
 Chaque OS implémente une fonction
d’ordonnancement qui n’est pas une tâche en soit.
Mais une fonction appelée à plusieurs endroits du
noyau:
 Fin de routine d’interruption
 Lorsque les tâches sont mises en sommeil
 Lorsque les tâches sont prêtes à s’exécuter.
 L’ordonnancement, c’est de la pure perte de temps:
plus l’algorithme est complexe, moins il est bon de
l’implémenter
L’ORDONNANCEMENT
Il est possible de distinguer trois types d’ordonnanceurs : à long terme, à
moyen terme et à court terme.
À long terme : L’ordonnanceur fait la sélection de programmes à admettre
dans le système pour leur exécution. Les programmes admis deviennent des
processus à l’état prêt. L’admission dépend de la capacité et du niveau de
performance requis.

À moyen terme : Il fait la sélection de processus déjà admis à débarquer ou


rembarquer sur la mémoire. Il effectue ses tâches de gestion en fonction du
degré de multiprogrammation du système, et aussi des requêtes d’E/S des
périphériques.

À court terme : L’ordonnanceur à court terme a comme tâche la gestion de la


file des processus prêts. Il sélectionne — en fonction d’une certaine politique
le prochain processus à exécuter. Il effectue aussi le changement de contexte
des processus.
QUAND ORDONNANCER ?
Les décisions d’ordonnancement sont prises dans plusieurs
circonstances:
 Création d’un processus (Fork)

 Fin d’un processus

 En trouver un autre
 Si aucun, un processus spécial est exécuté (idle ou
Processus inactif du système)
 Quand un processus devient bloqué

 Attente d’une E/S ou d’une condition


 Peut influer sur le prochain à exécuter
 Interruption E/S : Si indique fin de traitement, réordonnancer
le processus qui attendait
TÂCHES DE L’ORDONNANCEUR
 L’ordonnanceur est le composant de l’OS qui détermine
l’ordre et la durée des tâches qui s’exécutent sur le CPU.
 L’ordonnanceur dicte l’état dans lequel doivent se trouver
les tâches.
 Il charge et décharge le bloc de contrôle de la tâche
(descripteur de processus ou task_struct dans le cas de
Linux).
 Certains OS utilisent un processus séparé pour allouer le
CPU au processus nouvellement sélectionné, il s’appelle le
dispatcheur.
 Tous les processus ne sont pas égaux
 L’interactivité est importante
 Les tâches de fonds… moins
L’ORDONNANCEMENT : TYPES
 Ordonnancement non préemptif : Un processus est choisi
et détient le CPU jusqu’à ce qu’il bloque ou se termine

 Ordonnancement préemptif :Un processus n’a le CPU


que pour une durée donnée (timeslice)
OBJECTIFS DE L’ORDONNANCEMENT

Les objectifs des algorithmes d’ordonnancement dépendent du


système considéré, Mais certaines propriétés sont communes
Ce qui est commun
 Respect des règles :
 permettre à certains processus d’avoir un ordonnancement particulier
 Équilibre : Maximiser l’utilisation du système (alterner des E/S et du
CPU)
 Équité : chaque processus doit avoir accès au CPU de manière
équitable
 Batch
 Débit : maximiser le nombre de jobs par heure
 Temps d’exécution de l’appli: minimiser le temps entre la soumission
et la complétion
 CPU : maximiser l’utilisation du CPU
OBJECTIFS DE L’ORDONNANCEMENT
 Interactif
 Réactivité: répondre rapidement aux demandes (temps de
réponse)
 Proportionnalité
 Les utilisateurs ont souvent une idée du temps que va prendre une
opération (click == rapide…)
 L’ordonnanceur doit choisir les processus pour être conforme à leurs

attentes
 Temps réel
 Respecter les contraintes temporelles
 Prédictibilité : l’ordonnanceur doit être prévisible
 Certains de ces objectifs peuvent ne pas être maximisés
en même temps (voire contradictoires)
 Débit et temps de réponse par exemple…
QUELQUES POLITIQUES D’ORDONNANCEMENT

Ordonnancement sans préemption


 First Come First Served (premier arrivé, premier
servi).
 Le plus court d’abord (SPN/Shortest Process
Next)
 A priorité : L’utilisateur donne des priorités aux
différents processus et les processus sont activés
en fonction de cette priorité.
Préemptif :
 Round Robin (tourniquet) : Cet algorithme est spécialement
adapté aux systèmes en temps partagé. On définit un quantum de
temps (time quantum) d’utilisation de l’unité centrale. La file d’attente
des processus éligibles est vue comme une queue circulaire (fifo
circulaire). Tout nouveau processus est placé à la fin de la liste
Concept de processus

• Un processus est un programme en cours d’exécution


Un processus <> un programme

• Le processeur traite une tâche à la fois, s’interrompe et passe à la


suivante
Notion de base
Processus
Un processus est un programme en cours d’exécution. Tout processus a un
PID (pour process id).

Processus père(PPID) et processus fils


Le processus fils est un processus qui a été créé par un autre processus qui
prend le nom de processus père.

Identification d’un processus


Un processus sous Linux est identifié par un numéro unique qui s’appelle
le numéro d’identification du processus PID (Process IDentifier) et qui
lui est attribué par le système à sa création.
Etats des processus
Quand un processus s’exécute, il change d’état.

Chaque processus peut se trouver dans chacun des états suivants :


Nouveau, Prêt, en cours d’exécution, en attente, arrêté, etc;

Un seul processus peut être en exécution sur n’importe quel processeur à tout
moment. Toutefois, plusieurs processus peuvent être prêts et en attente

Point de vue conceptuel: chaque processus possède son processeur virtuel.

Réalité: le processeur bascule constamment d’un processus à l’autre. Ce


basculement rapide est appelé multiprogrammation.

61
ETATS DES PROCESSUS

• Le diagramme d’état du processus


Prêt
processeur
alloué
admit
interruption
en sortie
terminé
exécution
Nouveau occurrence d’un
événement

en attente
d’un événement
Bloqué
Terminologie
Init :
Le processus init a toujours ID = 1. Le processus init est lancé par le noyau
lui-même. Il ne dispose pas d'un processus parent
Kill :
Lorsqu'un processus s’arrête, il meurt. Si nous voulons qu’ un processus
s’arrête nous le tuons.
Daemon :
Processus qui sont lancés au démarrage du système, Ces processus ne sont
sous le contrôle d’aucun terminal et ont comme propriétaire
l’administrateur du système . Ils assurent des tâches d’ordre général,

Zombi :
Quand un processus est tué, mais il apparaît toujours sur le système, alors
le processus est appelé zombie. Vous ne pouvez pas tuer des zombies,
parce qu'ils sont déjà morts.
58
Terminologie
Temps partagé
Une exploitation dans laquelle plusieurs processus sont simultanément
en cours d’exécution. Cette simultanéité n’est qu’apparente.

Swapping (va-et-vient)
Consiste en la recopie sur disque d’un processus complet ou d’une
partie d’un processus ayant perdu le contrôle de l’unité centrale et ne
pouvant plus rester en mémoire centrale. La mémoire centrale ainsi
libérée est affectée à un processus plus prioritaire.

59
Classification des processus
Il est possible de distinguer deux types de processus : les processus
système
et les processus utilisateurs.

a) Les processus système (daemons)


Ils ne sont sous le contrôle d’aucun terminal et ont comme propriétaire
l’administrateur du système. Ils assurent des tâches d’ordre général et ne
sont d’habitude stoppés qu’à l’arrêt du système d’exploitation.

Les plus courants sont :


● init : initialise un processus par terminal connecté sur la machine,
permettant la connexion des utilisateurs. Il a le numéro 1.
● crond : permet l’exécution d’un programme en mode cyclique.
● xinetd : super démon internet chargé de créer les processus
serveurs réseau sur requêtes des clients.
Classification des processus
b) Les processus utilisateurs :
Ils correspondent à chaque exécution d’un programme par l’utilisateur,
le premier d’entre eux étant l’interpréteur de commandes à la
connexion. Ces processus appartiennent à l’utilisateur et sont
généralement attachés à un terminal.

61
Création 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

• Les processus peuvent se structurer sous la forme d’une arborescence

P1

P2 P3

P4 P5 P6
Destruction d’un processus
• 3 possibilités pour l’arrêt d’un processus
• Normal : par lui même en ayant terminé ses opérations
• Autorisé : par son père qui exécute une commande appropriée
• Anormal : par le système
• temps d’exécution dépassé
• mémoire demandée non disponible
• instruction invalide
• etc.

• Le processus créateur est le seul à pouvoir exécuter l’arrêt de ses fils

• Dans plusieurs systèmes, la destruction d’un processus père entraîne


la destruction de tous ses fils
Mise en oeuvre
• Pour mettre en oeuvre le modèle des processus, le système
d’exploitation construit une table, appelé table des processus, dont
chaque entrée correspond à un processus particulier

• Chaque entrée comporte des informations sur :


• l’état du processus
• son compteur ordinal : contient l’adresse de la prochaine
instruction à extraire de la mémoire
• son pointeur de pile : contient l’adresse courante du sommet de pile
en mémoire
• son allocation mémoire
• l’état de ses fichiers ouverts
• et tous ce qui peut être sauvegardé lorsqu’un processus passe
de l’état élu à l’état prêt
Structure d’un processus
• L’environnement d’un processus comprend :
• un numéro d’identification unique appelé PID (Process IDentifier)
• le numéro d’identification de l’utilisateur qui a lancé ce processus,
appelé UID (User IDentifier), et le numéro du groupe auquel appartient
cet utilisateur, appelé GID (Group IDentifier)
• le répertoire courant
• les fichiers ouverts par ce processus
• le masque de création de fichier, appelé umask
• la taille maximale des fichiers que ce processus peut créer, appelé
ulimit
• la priorité
• les temps d’exécution
• le terminal de contrôle, c’est à dire le terminal à partir duquel la
commande a été lancée, appelé TTY
Un exemple : schéma d’un processus
UID = 106 répertoire courant
GID = 104 PID = 36 /usr/c1

fichiers ouverts
0 <- /dev/term/c4
signaux traités cmd1 1 -> /dev/term/c4
2 -> /dev/term/c4
3 <-> /tmp/toto

umask = 027
ulimit = 2048 /dev/term/c4 priorité = 20
temps = 0.3

Ce processus a le numéro 36. Il a été lancé par l’utilisateur qui a 106 pour UID.
Il est entrain d’exécuter le programme ‘cmd1’. Il a consommé 0.3 seconde, avec
une priorité de 20. Son masque de création est 027. Son terminal de contrôle
est /dev/term/c4. Son répertoire courant est /usr/c1. Il a 4 fichiers ouverts :
0, 1, 2, et 3.
Structure d’un processus Unix
• Le PPID est le PID du processus père
• Le processus fils hérite de tout l’environnement du processus père, sauf bien
sûr du PID, du PPID et des temps d’exécution
• Le père du processus 36 est le processus 27, et celui de 27 est le processus 1
• Seul le fils 36 a ouvert le fichier /tmp/toto

Père Fils

PID = 27 répertoire PID = 36 répertoire


UID = 106 PPID = 1 UID = 106 PPID = 27
GID = 104 courant GID = 104 courant
/usr/c1 /usr/c1

fichiers ouverts fichiers ouverts


signaux 0 <- /dev/term/c4 signaux
traités ksh traités cmd1 0 <- /dev/term/c4
1 -> /dev/term/c4 1 -> /dev/term/c4
2 -> /dev/term/c4 2 -> /dev/term/c4
umask = 027 umask = 027 3 <-> /tmp/toto
ulimit = 2048 ulimit = 2048

/dev/term/c4 priorité = 20 /dev/term/c4 priorité = 20


temps = 0.1 temps = 0.3
Les processus : la commande ps
• Un processus est un programme qui est en cours d’exécution
• La commande ps donne un ensemble de renseignements sur les
processus en court d’exécution

• Syntaxe : ps options

• Options :
• -a : affiche des renseignement sur tous les processus attachés à
un terminal
• -l : donne, pour chaque processus, le nom de l’utilisateur (user),
le pourcentage de cpu (%cpu), la taille totale du processus dans la
mémoire (size), la mémoire réservée (rss) en Ko …
• -x : affiche également des informations sur les processus non liés au
terminal
• -w : affiche sur 132 colonnes, utile pour voir le nom complet de la
commande associée à chaque processus
Les processus : la commande ps

Parmi les nombreuses options de cette commande, les options suivantes sont
particulièrement utiles :

-u nom_utilisateur permet de sélectionner les processus de cet utilisateur


pour l’ensemble de ses connexions.
-e affiche des renseignements sur tous les processus en cours,
-C affiche des renseignements sur tous les processus d’un certain nom
-f génère, pour chaque processus, (UID, PID, PPID, l’heure de lancement
du processus, nom du terminal et le temps d’exécution du processus.
-A Affiche tous les processus du système.
-H Ordonne et indente les processus selon leur généalogie (PPID).
80
Les processus : la commande ps
% ps
PID TTY STAT TIME CMD
746 pts/3 S 00:00:00 -bash
749 pts/3 S 00:00:02 gs
848 pts/3 S 00:03:28 mozilla-bin
965 pts/3 S 00:00:00 ps

• PID : le numéro d’identification du processus


• TTY : le terminal depuis lequel le processus a été lancé
• STAT : l’état du processus au moment du lancement de la commande
• R : le processus est en cours d’exécution
• T : le processus est stoppé
• S : le processus dort depuis moins de 20 secondes
• Z : le processus en attente d’un message du noyau
• TIME : le temps d ’exécution de la commande
• CMD : le libellé de la commande lancée
Commandes similaires
• Pgrep : Semblable à la ps -C, vous pouvez $ sleep 1000 &
également utiliser pgrep pour rechercher un [1] 32558
processus par son nom de commande. $ pgrep sleep
32558
$ ps -C sleep
PID TTY TIME CMD
32558 pts/3 00:00:00 sleep
• Vous pouvez aussi lister les processus avec
leur nom de commande avec pgrep. $ pgrep -l sleep
9661 sleep

• Top : Un autre outil populaire sur Linux est top. Il permet d’avoir les
processus selon cpu utilisation ou d'autres propriétés. Vous pouvez
également tuer les processus avec. Utiliser l’aide linux
pour avoir de l’aide sur top.
81
OPÉRATIONS SUR LES PROCESSUS
 Créer : La commande fork
Tout processus est crée par un processus père Sous UNIX: fork est le seul
appel système qui crée un nouveau processus
• le processus père et le processus fils ont la même image
mémoire et les mêmes fichiers ouverts
• le processus fils dispose d’une copie de l’espace d’adressage de
son père

la distinction entre les deux processus se fait par leurs identifiants :


• getpid : retourne l’identifiant du processus
• getppid : retourne l’identifiant du processus père
Opération sur les processus
exec : Avec la commande exec, vous pouvez exécuter un processus
La commande exec sous Linux est utilisée pour exécuter une
commande à partir de bash lui-même. Cette commande ne crée
pas de nouveau processus, elle remplace simplement bash par la
commande à exécuter.

Exemple :
un Korn shell (ksh) est démarré et est remplacé par un
bash shell en utilisant la commande exec. Le PID du
shell bash est le même que le pid du Korn .
Quitter le shell bash enfant va me revenir vers le bash
père et non pas le Korn shell (qui n’existe plus).
Opération sur les processus Arrêt d’un
processus : kill
• La commande kill permet d’envoyer un signal au processus

• Syntaxes :
kill -signal pid
kill -l
• Options :
• -9 : demande l’arrêt du processus désigné par son pid
• -l : affiche la liste des signaux disponibles

% kill -l
1) HUP 2) INT 3) QUIT …
7) EMT 8) FPE 9) KILL …

% kill -9 1635
Cette commande tue le processus dont le numéro PID est 1635
Opération sur les processus : kill

En utilisant Kill, nous envoyons un signal au processus

Signal : Un certain nombre d’événements (erreur, <ctrl c>,…)


peuvent ê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 :

SIGHUP (SIGnal Hang UP : fin du shell) ( kill -1)


SIGINT (SIGnal INTerrupt : interruption du programme)
SIGKILL (SIGnal KILL : tuer le processus) ( kill -9)
SIGTERM (SIGnal TERMinate : terminaison douce) ( kill -15)
SIGQUIT (SIGnal QUIT : terminaison brutale)
SIGSTOP (SIGnal STOP : stopper le processus) ( kill -19)

Kill –l pour afficher la liste de tous les signaux disponible 85


Opération sur les processus : kill

Pour détruire un processus dont le shell attend la terminaison,


on utilise le raccourci clavier ctrl-c.

Pour interrompre sans détruire un processus, on utilise le


raccourci clavier ctrl-z.

Entant que signal :

9 destruction inconditionnelle de processus (ctrl-c)


19 suspension de processus (ctrl-z)

61
Les commandes de gestion des PS

• Pkill : utiliser pour tuer un processus en spécifiant son nom

• Killall : envoie le signal 15 à tous les processus

• Time : Mesure les durées d’exécution d’une commande. Elle retourne


trois valeurs :
real : durée totale d’exécution de la commande ;
user : durée du
temps CPU nécessaire pour exécuter le programme ;
system : durée
du temps CPU nécessaire pour exécuter les
commandes liées à l’OS (appels système au sein d’un
programme).
86
Les commandes de gestion des PS

• su : permet de faire exécuter un processus avec une autre identité que


le sien
su jean -c "id" : exécute id sous le login de jean.
• fuser : informations sur les processus qui utilisent un périphérique ou le
système de fichiers.
• & : exécute un processus en arrière-plan
• wait : attend que les commandes exécutées en arrière-plan soit
terminée pour poursuivre l'exécution du shell.
Opération sur les processus : les priorités
Notion :
Tous les processus ont une priorité et une valeur « nice ». Les processus
dont la priorité est supérieure obtiendront plus temps cpu que les
processus de priorité inférieure.
Commandes :
Nous agissant sur ces priorités avec la commandes : nice .

88
Opération sur les processus : les priorités
La commande nice

La commande nice permet de lancer une commande avec une priorité plus
faible, afin de permettre éventuellement à d’autres processus de tourner
plus rapidement.

nice [-valeur] commande [arguments]

Une valeur positive causera une baisse de priorité, une négative cause
l’augmentation de la priorité (si autorisé). La valeur doit être comprise
entre - 20 et 20. Plus la valeur est élevée et plus le traitement est ralenti.

89
EXERCICE

 Visualisez les processus de votre session courante


utiliser la commande ps
 Affichez les processus d’un utilisateur. utiliser la
commande ps -u NomUser
 Affichez tous les processus avec des détails. utiliser la
commande ps –ef (-e: tous les processus, -f détaillé)
Exercice
1. Utilisez ps pour rechercher le processus init par son nom.
2. Quel est le numéro du processus init?
3. Utilisez la commande who pour déterminer le nom de votre terminal.
4. en utilisant votre nom de terminal, utiliser ps pour trouver tous les
processus associés à votre terminal.
5. Quel est le numéro de processus de votre shell?
6. Quel est le id parent processus de votre shell?
7. Démarrez deux instances sleep 3342 en arrière-plan (background) .
8. Repérez le numéro de processus de toutes les commandes sleep.
9. Utilisez la commande standard kill pour tuer l'un des processus sleep.
10. Utilisez une commande kill pour tuer tous les processus sleep.
87
ENCHAINEMENT DES PROCESSUS
 # en parallèle prog1 & prog2 & prog3
 # en parallèle avec redirections via des tubes prog1 | prog2 | prog3
 # en séquence prog1 ; prog2 ; prog3

ENCHAÎNEMENTS CONDITIONNELS

•« et alors » && : la commande de droite est exécutée si et seulement si


la commande de gauche a réussi (status = 0) : prog1 && prog2

•« ou sinon » || : la commande de droite est exécutée si et seulement si


la commande de gauche a échoué (status ≠ 0) : prog1 || prog2
Le Job control
Le job est une ligne de commandes shell. Il est composé d’un ou de
plusieurs processus. Chaque job est numéroté de 1 à N par le shell.
Un job peut se trouver dans trois états :
● avant-plan (“foreground”). Le job s’exécute sans la main en shell.
● arrière-plan (“background”). Le job s’exécute avec la main en shell.
● suspendu (“suspended”). Le job est en attente, il ne s’exécute pas.
Le passage d’un état du job à un autre est présenté sur la figure suivante :

90
EXÉCUTION D’UNE COMMANDE
Foreground

la commande est lancée à partir d’un interpréteur de commandes.


L’utilisateur ne peut utiliser le terminal qu’à la fin de son exécution.

À tout moment, il est possible d’interrompre la commande en utilisant la


combinaison de touches <ctrl c>, ou de la suspendre à l’aide de <ctrl z>

63
EXÉCUTION D’UNE COMMANDE
Background
Le lancement de commandes en arrière-plan permet de rendre
immédiatement le contrôle à l’utilisateur. Cette fonctionnalité est
intéressante pour des tâches ne nécessitant pas d’interaction entre
l’utilisateur et la tâche.

La commande est lancée suivie du caractère &. Son exécution peut être
surveillée par les commandes ps ou jobs.

64
Le Job control
Le Job contrôl est la capacité d’arrêter, de suspendre, de reprendre et de
mettre en arrière plan un processus encours d’exécution

Job en arrière-plan

La création d’un job en arrière-plan est réalisée par & qui lance une commande
en “background”

Exemple
$(find /usr type d print | sort >/tmp/toto &
[1] 2349
Les job créé dans cet exemple comporte deux processus. Le shell après la
commande rend la main et permet l’utilisation du shell en interactif.
La commande jobs -l permet de lister les jobs en cours.
jobs –p pour avoir les ID des processus lancés en arrière plan
91
Le Job control
Job suspendu

Une commande peut être suspendue lorsqu’elle est en avant-plan par la


touche <ctrl Z>.
Lorsqu’elle est en arrière-plan la commande : kill SIGSTOP %numero_job
ou kill STOP %numero_job permet de suspendre la commande
associée au numéro de job numero job.

La commande bg %numero-job permet de basculer un job suspendu en


job en arrière-plan.
Job en avant-plan
Toute commande lancée interactivement en shell est en avant-plan. Un
job en arrière plan ou suspendu peut être mis en avant-plan par la
commande fg %numero_job .
92
Le Job control
Sortie de session et job control

Lorsqu’on quitte une session tous les processus attachés à la session


seront interrompus.
En effet, le Bash envoie à chaque job le signal SIGHUP indiquant la fin de
session et par conséquent l’arrêt du job. Pour éviter qu’un processus en
arrière-plan soit ainsi interrompu en quittant sa session il faut :

● soit utiliser la commande nohup lors du lancement de la commande .


● soit désactiver l’envoi du signal SIGHUP par le Bash en utilisant la
commande disown h %numero_job. Cette commande n’est
disponible que pour la version 2 du Bash.
Exercices
1. Utilisez la commande jobs pour vérifier si vous avez des processus qui
s’exécutent en arrière-plan.
2. Utilisez vi pour créer un petit fichier texte. Suspendre vi en arrière-plan.
3. Vérifiez avec des jobs que vi est suspendu en arrière-plan.
4. Démarrer find / > allfiles.txt 2>/dev/null. Suspendre là en arrière-plan
avant qu’elle se termine.
5. Lancer deux processus sleep longs en arrière-plan.
6. Afficher tous les jobs en arrière-plan.
7. Utilisez la commande kill pour suspendre le dernier processus sleep.
8. Poursuivre le processus find en arrière-plan (assurez-vous qu'il s’exécute
à nouveau).
9. rendre un des processus sleep en avant plan.
Solution
solution : backgroundprocesses
1. Use the jobs commandto verify whether you haveany processes running in background.
jobs (maybethe catfun is still running?)
2. Use vi to create a little text file. Suspend vi in background.
vi text.txt
(insidevi press ctrl-z)
3. Verify with jobs thatvi is suspended in background.
[paul@rhel53~]$ jobs
[1]+ Stopped vim text.txt
4. Start find / > allfiles.txt 2>/dev/null in foreground. Suspend it in backgroundbefore it
finishes.
[paul@rhel53~]$ find / > allfiles.txt2>/dev/null
(pressctrl-z)
[2]+ Stopped find / > allfiles.txt 2> /dev/null
5. Start two long sleep processes in background.
sleep 4000 & ; sleep 5000 &
6. Display all jobs in background.
[paul@rhel53~]$ jobs
[1]- Stopped vim text.txt
[2]+ Stopped find / > allfiles.txt 2> /dev/null
[3] Running sleep 4000 &
[4] Running sleep 5000 &
7. Use the kill commandto suspend the last sleep process.
[paul@rhel53~]$ kill-SIGSTOP 4519
[paul@rhel53~]$ jobs
[1] Stopped vim text.txt
[2]- Stopped find / > allfiles.txt 2> /dev/null
[3] Running sleep 4000 &
[4]+ Stopped sleep 5000
8. Continue the find process in background(makesure it runs again).
bg 2 (verify the job-id in your jobs list)
9. Put one of the sleep commandsbackin foreground.
fg 3 (again verify your job-id)
RAPPEL SUR LES ENTRÉES - SORTIES
Lors de l’exécution d’une commande, un processus
est créé. Celui-ci va alors ouvrir trois canaux
de communication:
- L’entrée standard,
- La sortie standard,
- La sortie d’erreurs standard.
A chacun des trois canaux est affecté un nom de
fichier et un numéro :
RAPPEL SUR LES REDIRECTIONS D’ENTRÉE SORTIE
Un processus Unix possède par défaut
trois voies d’interaction avec l’extérieur
appelées entrées / sorties standard

Toute commande étant exécutée par un


processus, possède trois entrées / sorties
standard.

➢ > fichier Sortie standard vers un fichier (l’écrase si il existe)


➢ >> fichier sortie standard vers la fin d’un fichier
➢ > fichier entrée standard est un fichier
➢ >> fichier entrée standard en mode saisie jusqu’à mot de fin
➢ 2> fichier sortie d’erreur vers fichier
➢ 2>> fichier sortie standard à la fin d’un fichier
➢ 2>&1 rediriger la sortie standard pour les messages d’erreur vers la
sortie standard
➢ cmd1 | cmd2 sortie de cmd1 est l’entrée de cmd2

Vous aimerez peut-être aussi