Une tâche qui bloque votre terminal n’est pas une fatalité. Ctrl+Z la suspend, bg la relance en arrière-plan, fg la ramène devant vous. Le contrôle des tâches est le mécanisme natif du shell pour jongler entre plusieurs processus sans ouvrir de nouveau terminal.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Suspendre une tâche en cours avec
Ctrl+Z - Lister les tâches actives avec
jobs -l - Passer une tâche en arrière-plan avec
bg - Ramener une tâche au premier plan avec
fg - Référencer une tâche par son numéro avec
%n - Tuer une tâche avec
kill %n - Détacher définitivement une tâche avec
disown
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Cette compétence est utile dès qu’une commande prend du temps et bloque votre prompt :
- une compilation ou une copie longue,
- un éditeur ouvert que vous voulez mettre de côté,
- un processus que vous avez lancé en foreground par erreur,
- une tâche que vous voulez survivre à la fermeture du terminal.
Lancer un processus en arrière-plan
Section intitulée « Lancer un processus en arrière-plan »sleep 60 &L’opérateur & place le processus en background dès le lancement. Le shell affiche le numéro de job et le PID, puis rend le prompt immédiatement :
[1] 1842[1] est le numéro de tâche (job number). 1842 est le PID.
# Capturer le PID de la dernière tâche lancée en backgroundsleep 60 &MYPID=$!echo "PID de la tâche : $MYPID"Lister les tâches : jobs
Section intitulée « Lister les tâches : jobs »jobs -l[1]+ 2075842 Running sleep 60 &[2]- 2075843 Stopped vim fichier.txtColonnes :
| Élément | Signification |
|---|---|
[1] | Numéro de tâche |
+ | Tâche courante (celle que fg reprend par défaut) |
- | Tâche précédente |
Running / Stopped | État |
sleep 60 & | Commande |
Suspendre une tâche : Ctrl+Z
Section intitulée « Suspendre une tâche : Ctrl+Z »Pendant qu’une commande tourne en foreground, appuyez sur Ctrl+Z :
vim fichier.txt^Z[1]+ Stopped vim fichier.txtLe processus est suspendu (état T) — il n’utilise plus le CPU mais reste en mémoire. Le prompt est restitué.
Reprendre en arrière-plan : bg
Section intitulée « Reprendre en arrière-plan : bg »bg %1La tâche suspendue [1] reprend son exécution en arrière-plan. Vous pouvez aussi utiliser bg sans argument pour reprendre la tâche courante (marquée +).
# Suspendre puis reprendre en backgroundsleep 60^ZbgRamener au premier plan : fg
Section intitulée « Ramener au premier plan : fg »fg %1La tâche [1] reprend le foreground — votre terminal est à nouveau bloqué tant qu’elle n’est pas terminée.
fg # reprend la tâche courante (+)fg %2 # reprend la tâche numéro 2Référencer les tâches par leur nom
Section intitulée « Référencer les tâches par leur nom »En plus de %n, vous pouvez référencer une tâche par le début de son nom :
fg %vim # reprend la tâche dont la commande commence par "vim"kill %sleep # tue la tâche dont la commande commence par "sleep"Tuer une tâche par son numéro
Section intitulée « Tuer une tâche par son numéro »kill %1 # envoie SIGTERM à la tâche 1kill -9 %2 # envoie SIGKILL à la tâche 2Nettoyage de toutes les tâches :
kill $(jobs -p)jobs -p liste uniquement les PIDs — ce qui permet de les passer à kill en une seule ligne.
Attendre la fin d’une tâche : wait
Section intitulée « Attendre la fin d’une tâche : wait »sleep 3 &MYPID=$!echo "En attente..."wait $MYPIDecho "Terminé avec le code : $?"wait bloque le shell jusqu’à la fin du processus désigné. Sans argument, il attend toutes les tâches background actives.
Détacher une tâche du shell : disown
Section intitulée « Détacher une tâche du shell : disown »disown retire une tâche de la table des jobs. Elle survit à la fermeture du shell mais ne reçoit plus SIGHUP.
sleep 120 &disown $!jobs # la tâche n'apparaît plusps -p $PID # mais le processus est toujours en vieVariantes utiles :
disown -h $! # marque la tâche "immune au SIGHUP" sans la retirer de jobsdisown -a # détache toutes les tâchesRécapitulatif des raccourcis
Section intitulée « Récapitulatif des raccourcis »| Action | Raccourci / Commande |
|---|---|
| Suspendre (foreground → stopped) | Ctrl+Z |
| Reprendre en arrière-plan | bg %n |
| Ramener au premier plan | fg %n |
| Lancer directement en background | commande & |
| Capturer le PID de la dernière tâche background | $! |
| Lister les tâches | jobs -l |
| Tuer par numéro de job | kill %n |
| Attendre la fin | wait $PID |
| Détacher du shell | disown $PID |
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
bg sans effet sur une tâche | Certains programmes ignorent SIGCONT (GUI, ncurses) | Fermer proprement avec kill %n, puis relancer avec & |
fg %2 répond “no such job” | Numérotation différente selon les shells | Vérifier avec jobs -l et utiliser le bon numéro |
La tâche disparaît à la déconnexion malgré & | SIGHUP envoyé à la fermeture de session | Utiliser disown -h ou nohup |
kill %1 ne termine pas la tâche | Processus en état D ou ignore SIGTERM | kill -9 %1 ; si état D, diagnostiquer l’I/O bloqué |
$! vide dans le script | La dernière commande n’a pas été lancée avec & | Ajouter & à la fin de la commande |
À retenir
Section intitulée « À retenir »&place un processus en arrière-plan au lancement ;Ctrl+Zsuspend un processus en cours.jobs -lliste les tâches avec leur numéro et leur PID.bg %nreprend,fg %nramène,kill %ntue — toujours par numéro de job.$!contient le PID de la dernière tâche lancée en arrière-plan.disowndétache une tâche déjà lancée pour qu’elle survive à la fermeture du shell.