💻 Systèmes

Gestion des processus sous Linux et Windows

📅 10 avril 202610 min de lecture
linuxwindowsbash

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 :

  1. Nouveau (New) : en cours de création
  2. Prêt (Ready) : chargé en mémoire, attend le CPU
  3. En exécution (Running) : le CPU exécute ses instructions
  4. En attente (Waiting/Blocked) : attend un événement (E/S disque, réseau)
  5. 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

AlgorithmePrincipeAvantageInconvénient
FIFO/FCFSPremier arrivé, premier serviSimpleEffet convoi
Round RobinQuantum de temps fixe par processusÉquitableOverhead de contexte
PrioritésLe plus prioritaire passe en premierRéactifFamine possible
CFS (Linux)CPU proportionnel au poidsÉquitableComplexe

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 :

SignalActionInterceptable ?
SIGTERM15Terminaison propreOui
SIGKILL9Terminaison forcéeNon
SIGSTOP19Suspendre le processusNon
SIGCONT18Reprendre
SIGHUP1Relire la configurationOui
SIGINT2Interruption (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
htop

Gé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 PID

Processus 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 1234

Points 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, htop pour observer ; kill, nice, renice pour gérer