Vous quittez une session Bash avec exit, et le terminal vous répond :
logout
There are stopped jobs.
Ce message apparaît souvent après un réflexe malheureux : Ctrl+Z. On pense annuler une faute de frappe, comme dans une application graphique. Mais dans un terminal Unix, Ctrl+Z ne veut pas dire “annuler”. Il veut dire : “suspendre le programme en cours”. Ambiance.
Le résultat est simple : votre éditeur, votre commande ou votre script reste suspendu dans la session. Bash refuse alors de fermer immédiatement le terminal, car il sait qu’un processus est encore accroché à votre shell.
Pourquoi Bash affiche “There are stopped jobs” ?
Bash affiche ce message lorsqu’un ou plusieurs jobs sont suspendus au moment où vous essayez de quitter le shell.
Un stopped job n’est pas simplement une tâche lancée en arrière-plan. C’est un processus suspendu. Il ne continue pas son travail normalement. Il attend que vous décidiez quoi en faire : le reprendre, le terminer, ou le détacher.
Le cas classique ressemble à ceci :
- vous éditez un fichier avec
nano,vim,lessou une autre commande interactive ; - vous appuyez sur
Ctrl+Z; - la commande disparaît de l’écran ;
- vous revenez au prompt Bash ;
- vous tapez
exit; - Bash répond :
There are stopped jobs.
Bash vous protège donc contre une fermeture accidentelle. C’est utile, même si sur le moment cela ressemble à un refus d’obtempérer.
Ctrl+C, Ctrl+Z et Ctrl+D : ne pas confondre
Dans un terminal, ces raccourcis ne font pas la même chose.
| Raccourci | Effet habituel | À utiliser pour |
|---|---|---|
Ctrl+C | Interrompt la commande en cours | Arrêter une commande qui tourne |
Ctrl+Z | Suspend la commande en cours | Mettre un processus en pause |
Ctrl+D | Envoie une fin d’entrée | Quitter certains shells ou programmes interactifs |
Le piège vient de Ctrl+Z. Dans beaucoup d’applications graphiques, il annule la dernière action. Dans Bash, il suspend le programme au premier plan. Ce n’est pas une annulation. C’est une pause forcée.
Lister les jobs suspendus avec jobs
Pour voir les jobs connus par votre shell, utilisez :
jobs
Vous obtiendrez une sortie de ce type :
[1]+ Stopped nano fichier.confLangage du code : CSS (css)
Ici, Bash indique qu’un job numéro 1 est suspendu. Le signe + marque le job courant, c’est-à-dire celui que Bash utilisera par défaut avec certaines commandes comme fg.
Pour afficher uniquement les jobs suspendus, utilisez :
jobs -s
Pour afficher aussi les identifiants de processus, utilisez :
jobs -l
Reprendre le job au premier plan avec fg
La solution la plus propre consiste souvent à reprendre le job suspendu, puis à le quitter correctement.
Pour reprendre le job courant :
fg
Pour reprendre un job précis, utilisez son numéro :
fg %1
La notation avec % est la forme Bash classique pour désigner un job. Dans beaucoup de cas, fg 1 fonctionne aussi, mais fg %1 évite l’ambiguïté et colle mieux au job control Bash.
Une fois le programme revenu au premier plan, quittez-le proprement. Par exemple :
- dans
nano, utilisezCtrl+X; - dans
vim, utilisez:qou:q!; - dans
less, appuyez surq; - dans un programme interactif, utilisez sa commande de sortie normale.
Vous pourrez ensuite quitter Bash normalement :
exitLangage du code : PHP (php)
Relancer le job en arrière-plan avec bg
Si le job peut continuer sans interaction, vous pouvez le reprendre en arrière-plan avec bg.
bg %1
Cette commande envoie au processus un signal de reprise. Le job continue alors son exécution en arrière-plan.
Attention toutefois : ce n’est pas adapté aux programmes interactifs comme nano, vim ou less. Ces programmes attendent une entrée clavier. Les envoyer en arrière-plan ne résout généralement rien. Dans ce cas, utilisez plutôt fg, puis quittez-les proprement.
Terminer un job suspendu avec kill
Si le programme est inutile ou bloqué, vous pouvez le terminer depuis Bash.
Commencez par lister les jobs :
jobs
Puis envoyez un signal de terminaison au job :
kill %1
Dans la plupart des cas, cela suffit. Si le processus refuse vraiment de disparaître, vous pouvez utiliser SIGKILL, mais seulement en dernier recours :
kill -9 %1
kill -9 ne laisse pas au programme le temps de nettoyer ses fichiers temporaires ou d’écrire correctement ses données. C’est le marteau. Parfois utile. Rarement élégant.
Fermer la session malgré les stopped jobs
Si vous tapez exit une première fois et que Bash répond :
There are stopped jobs.
vous pouvez taper exit une seconde fois. Bash quittera alors la session et terminera les jobs suspendus.
exit
exitLangage du code : PHP (php)
C’est pratique, mais pas toujours recommandé. Si un éditeur contient des modifications non enregistrées, vous pouvez les perdre. Mieux vaut inspecter les jobs avant de fermer la session à la hache.
Détacher un job avec disown
Dans certains cas, vous pouvez vouloir quitter le shell sans que Bash gère encore un job. C’est le rôle de disown.
Par exemple :
disown %1
Cette commande retire le job de la table des jobs du shell. Bash ne le surveille plus comme un job de la session.
Pour un vrai travail long sur serveur, préférez toutefois des outils adaptés : tmux, screen, un service systemd, ou une commande lancée proprement avec redirection des sorties. Un job bricolé dans une session SSH n’est pas une stratégie de production. C’est une prière avec un prompt.
Exemple complet
Voici un scénario typique avec nano.
nano /etc/example.conf
Vous appuyez par erreur sur Ctrl+Z. Bash affiche alors quelque chose comme :
[1]+ Stopped nano /etc/example.conf
Vous tentez de quitter :
exit
logout
There are stopped jobs.Langage du code : PHP (php)
La bonne réaction consiste à lister les jobs :
jobs
Puis à reprendre l’éditeur :
fg %1
Enfin, quittez nano proprement avec Ctrl+X, puis fermez la session :
exitLangage du code : PHP (php)
Checklist rapide
Ctrl+Zsuspend le programme au premier plan.jobsliste les jobs connus par le shell.jobs -saffiche uniquement les jobs suspendus.fg %1reprend le job numéro 1 au premier plan.bg %1reprend le job numéro 1 en arrière-plan.kill %1demande au job de se terminer.exitdeux fois ferme le shell, mais peut tuer les jobs suspendus.
À retenir
Le message There are stopped jobs. n’indique pas que Bash est cassé. Il indique qu’un processus est suspendu dans votre session.
La méthode propre consiste à utiliser jobs, puis fg pour reprendre le programme et le quitter correctement. Si le processus ne sert plus à rien, kill %1 fera le ménage. Et si vous avez appuyé sur Ctrl+Z en pensant annuler une faute de frappe, bienvenue au club : Bash vient simplement de vous rappeler que le terminal ne pardonne pas les réflexes de traitement de texte.



bonne introduction pour parler de la commande « screen »