Linux / Commande fg : ramener une tâche du shell au premier plan

fg ramène au premier plan une tâche en arrière-plan ou suspendue du shell Bash courant. La tâche peut alors recevoir l'entrée du terminal et le shell attend sa fin ou sa nouvelle suspension avant de rendre l'invite. La cible est une spécification de tâche, comme %1, à vérifier avec jobs.

Identifier la tâche dans le shell courant

fg [spécification-de-tâche]

Fg est une commande interne de Bash qui nécessite le contrôle des tâches. Utilisez-la dans le même terminal interactif que celui où la tâche a été lancée, après avoir lu :

jobs -l

Le numéro entre crochets identifie la tâche dans ce shell ; le PID affiché avec -l identifie un processus. Jobs explique les numéros de tâches et les PID. Fg ne sert pas à récupérer arbitrairement dans votre terminal un processus lancé par un autre shell.

Une tâche peut aussi correspondre à un pipeline, donc à plusieurs processus. Vérifiez son texte de commande plutôt que de choisir un numéro uniquement parce qu'il ressemble à celui d'un exemple.

Ramener puis suspendre une tâche de démonstration

Dans un terminal Bash interactif avec contrôle des tâches, lancez une attente qui ne modifie aucun fichier :

sleep 60 &
jobs -l

Si le sleep est la tâche 1, utilisez la ligne suivante. Si le numéro diffère, remplacez %1 par le numéro relevé :

fg %1

Le shell peut réafficher la commande puis attendre. Sleep n'a pas d'interface à montrer et ne produit normalement aucun texte : l'absence d'une nouvelle invite signifie ici qu'il est au premier plan, pas que fg a nécessairement échoué.

Pendant cette attente, appuyez sur Ctrl+Z, qui suspend habituellement la tâche. Lorsque l'invite revient, consultez :

jobs -l

Vous devez retrouver la même tâche, maintenant indiquée Stopped ou son équivalent localisé. Pour la reprendre au premier plan :

fg %1

Vérifiez de nouveau le numéro si d'autres tâches ont été créées. Laissez ce sleep finir ou appuyez sur Ctrl+C pendant qu'il est au premier plan pour lui envoyer l'interruption habituelle. Après le retour de l'invite, jobs permet de vérifier qu'il ne reste pas suspendu.

Si sleep termine avant votre manipulation, la tâche peut déjà avoir disparu. Recréez un nouvel essai et lisez son numéro. Avec un éditeur suspendu, le même principe permet de retrouver son interface plutôt qu'un simple écran d'attente ; la présentation dépend du programme.

Choisir la bonne spécification de tâche

Forme Sélection
fg %N La tâche numéro N du shell courant.
fg %+ La tâche que Bash considère comme courante.
fg %- La tâche précédente du contrôle des tâches.
fg La tâche courante, si elle existe.

Dans jobs, + marque la tâche courante et - la précédente. Après des créations, suspensions ou reprises, cette sélection peut changer. Avec plusieurs tâches, relire jobs -l évite de ramener un programme différent de celui attendu.

Bg reprend une tâche en arrière-plan et laisse le shell disponible ; fg lui rend le premier plan. Une application qui doit lire le terminal peut donc nécessiter fg plutôt que bg.

Comprendre le retour et les limites

Ctrl+Z suspend habituellement une tâche : elle existe encore. Ctrl+C envoie habituellement SIGINT au groupe de premier plan ; la réaction dépend des programmes. Ces touches ne sont pas des commandes à écrire dans un bloc de script.

Fg renvoie normalement l'état de la commande ramenée au premier plan. Il peut aussi échouer si la spécification ne correspond à aucune tâche, si le contrôle des tâches est désactivé ou si la tâche ne provient pas de ce contexte. Dans un shell non interactif, ne supposez pas que les fonctions d'un terminal interactif sont actives.

Fg n'assure pas la persistance après fermeture du terminal. Pour des travaux longs à retrouver plus tard, envisagez une session tmux ou une gestion par service adaptée. Ce besoin est distinct du simple déplacement d'une tâche entre premier et arrière-plan.

Le manuel des commandes de contrôle des tâches de Bash décrit fg et ses retours ; les principes de contrôle des tâches expliquent les spécifications et le terminal. Consultez help fg pour votre version.