Processus, jobs et signaux
« Le process est bizarre » : zombie ?
Prérequis (cursus dev) : programme et processus, observer les processus.
Pourquoi
« Le process est bizarre » : zombie ? bloqué ? qui est son père ? Les signaux sont le langage du contrôle — TERM vs KILL n'est pas une nuance, c'est la différence entre arrêter proprement et corrompre.
Concepts
- Hiérarchie : tout process a un père (
PPID,ps -ef --forest). Tuer le père orphelinise (adoptés par init/systemd). Comprendre l'arbre avant de tuer. - États : R (tourne), S (dort, normal), D (I/O ininterruptible — disque/NFS bloqué, intuable même en -9 !), Z (zombie : mort, père qui n'a pas lu son statut).
- Signaux : TERM (15, « termine proprement » — handler possible) puis KILL (9, exécution immédiate, sans handler — dernier recours). HUP (1, « recharge ta conf » pour les daemons), USR1/USR2 (custom : dump, rotation, debug selon l'app).
- Jobs shell :
&(fond),Ctrl-Z+bg/fg,disown/nohup(survit au terminal). En prod : systemd, pas nohup (cf. DevOps 1.2) — mais en debug, utile.
Exemple : tuer proprement
ps -o pid,ppid,stat,cmd -p 1234 # qui, père, état, quoi
kill 1234 # TERM d'abord, attendre 10 s
kill -0 1234 2>/dev/null || echo "mort" # tester sans signaler !
kill -9 1234 # KILL en dernier recours seul
Cas réel
kill -9 direct sur Postgres en écriture : shared buffers perdus, recovery au redémarrage + risque de corruption. TERM (checkpoint propre) aurait suffi. Règle : -9 = aveu d'échec à expliquer, jamais réflexe.
Pièges
- État D :
kill -9ne marche PAS (I/O bloquée). Soigner le stockage/réseau, pas le process. - Zombies : on ne tue pas un zombie (déjà mort) — on s'occupe du père qui ne récolte pas.
killallpar nom approximatif :killall javatue tout.pkill -fprécis + vérification avant.
À retenir
Arbre d'abord, TERM puis KILL (jamais l'inverse), D = intenable, zombies = problème du père.
Pas de correction en ligneConfrontez votre code aux résultats attendus du cours.