Gestion des processus sous Linux et Windows
Qu'est-ce qu'un processus ?
Un processus est une instance d'un programme chargé en mémoire, avec son propre espace d'adressage, ses descripteurs de fichiers, et son contexte d'exécution. Chaque processus est identifié par un PID (Process ID) unique.
Processus vs Thread
Un processus possède son propre espace mémoire isolé. La communication inter-processus (IPC) passe par des pipes, sockets, mémoire partagée ou files de messages.
Un thread (processus léger) partage l'espace mémoire de son processus parent. Les threads communiquent directement via la mémoire partagée, mais nécessitent des mécanismes de synchronisation (mutex, sémaphore) pour éviter les accès concurrents.
États d'un processus
Un processus passe par plusieurs états :
- Nouveau (New) : en cours de création
- Prêt (Ready) : chargé en mémoire, attend le CPU
- En exécution (Running) : le CPU exécute ses instructions
- En attente (Waiting/Blocked) : attend un événement (E/S disque, réseau)
- Terminé (Terminated) : exécution terminée, ressources libérées
Transitions principales : Ready → Running (le scheduler attribue le CPU), Running → Waiting (le processus demande une E/S), Running → Ready (préemption par le scheduler).
Ordonnancement (Scheduling)
Le scheduler décide quel processus prêt obtient le CPU.
Algorithmes d'ordonnancement
| Algorithme | Principe | Avantage | Inconvénient |
|---|---|---|---|
| FIFO/FCFS | Premier arrivé, premier servi | Simple | Effet convoi |
| Round Robin | Quantum de temps fixe par processus | Équitable | Overhead de contexte |
| Priorités | Le plus prioritaire passe en premier | Réactif | Famine possible |
| CFS (Linux) | CPU proportionnel au poids | Équitable | Complexe |
Préemptif vs coopératif
En ordonnancement préemptif, le scheduler peut interrompre un processus (Linux, Windows modernes). En coopératif, le processus garde le CPU jusqu'à ce qu'il le libère volontairement (Windows 3.1) — un processus qui boucle bloque tout le système.
Signaux Unix
Les signaux sont des notifications asynchrones envoyées aux processus :
| Signal | N° | Action | Interceptable ? |
|---|---|---|---|
| SIGTERM | 15 | Terminaison propre | Oui |
| SIGKILL | 9 | Terminaison forcée | Non |
| SIGSTOP | 19 | Suspendre le processus | Non |
| SIGCONT | 18 | Reprendre | — |
| SIGHUP | 1 | Relire la configuration | Oui |
| SIGINT | 2 | Interruption (Ctrl+C) | Oui |
Commandes Linux essentielles
Observer les processus
# Liste tous les processus
ps aux
# Arborescence parent-enfant
ps -ef --forest
# Temps réel (M = tri mémoire, k = kill, q = quitter)
top
# Version améliorée avec interface interactive
htopGérer les processus
# Envoyer SIGTERM (terminaison propre)
kill PID
# Envoyer SIGKILL (terminaison forcée)
kill -9 PID
# Tuer par nom
killall nginx
# Lancer avec priorité réduite (-20=haute, 19=basse)
nice -n 10 commande
# Modifier la priorité en cours
renice -n 5 -p PIDProcessus en arrière-plan
# Lancer en arrière-plan
commande &
# Lister les jobs du shell
jobs
# Ramener au premier plan
fg %1
# Survivre à la fermeture du terminal
nohup commande &Gestion sous Windows
Le Gestionnaire des tâches (Ctrl+Shift+Echap) affiche les processus, performances et services. L'onglet Détails montre les PID et permet de changer la priorité.
# Ligne de commande
tasklist
taskkill /PID 1234 /F
# PowerShell
Get-Process
Stop-Process -Id 1234Points clés pour le concours
- Un processus a son propre espace mémoire ; un thread partage celui du parent
- Les 5 états : nouveau, prêt, en exécution, en attente, terminé
- Linux utilise CFS (Completely Fair Scheduler), préemptif
- SIGTERM = propre, SIGKILL = forcé non interceptable
ps,top,htoppour observer ;kill,nice,renicepour gérer