« kill sert uniquement à tuer immédiatement. »
kill envoie un signal. TERM demande une sortie propre, STOP suspend, CONT reprend et KILL ne laisse aucun nettoyage possible.
01Envoie un signal observable
./module3-processes-software-lab.sh start
./module3-processes-software-lab.sh signal USR1
sleep 1
./module3-processes-software-lab.sh status
Le processus intercepte USR1 et écrit un événement. Un signal peut donc déclencher un comportement applicatif sans terminer le processus.
02Suspends et reprends tout le groupe
./module3-processes-software-lab.sh signal STOP
./module3-processes-software-lab.sh status
./module3-processes-software-lab.sh signal CONT
sleep 1
./module3-processes-software-lab.sh status
STOP, la colonne STAT contient T. CONT reprend les processus sans les recréer.03Choisis le bon signal
TERMHUPUSR1KILLkill -l
man 7 signal
04Utilise le job control du shell
sleep 300 &
job_pid=$!
job_spec='%+'
jobs -l
kill -STOP "$job_pid"
jobs -l
bg "$job_spec"
jobs -l
kill -TERM "$job_pid"
jobs, fg et bg concernent les jobs du shell courant. Un PID visible dans ps n’est pas forcément un job de ce shell.
05Observe la priorité
parent_pid=$(cat "/tmp/soria-linux-processes-$USER/run/parent.pid")
ps -o pid,ni,pri,stat,cmd -p "$parent_pid"
renice 5 -p "$parent_pid"
ps -o pid,ni,pri,stat,cmd -p "$parent_pid"
06Termine proprement
./module3-processes-software-lab.sh stop
./module3-processes-software-lab.sh status
Écris une procédure d’arrêt
Construis une procédure qui identifie la portée, envoie TERM, attend cinq secondes, vérifie avec kill -0 et n’utilise KILL qu’en dernier recours. Explique comment éviter la réutilisation d’un ancien PID.
✓Ce que tu retiens
Un signal doit avoir une intention, une cible et une vérification. La priorité agit sur l’ordonnancement ; le job control agit sur les commandes du shell courant.