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 |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À 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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Utiliser nohup : Maintenir un processus actif après déconnexion SSH.
- Travailler avec tmux : Sessions persistantes : la solution robuste pour les tâches longues.