Commande Linux fg
Liste complète des commandes Linux
fgC'est une commande importante pour le contrôle des processus dans les systèmes Linux/Unix, dont le nom complet est « foreground ». Sa fonction principale est de faire passer au premier plan les tâches s'exécutant en arrière-plan afin qu'elles poursuivent leur exécution.
Pourquoi avez-vous besoin de la commande fg
Imaginez que vous passez commande dans un restaurant :
- Vous commandez un plat principal (processus au premier plan)
- En même temps, demandez à la cuisine de préparer le dessert (processus en arrière-plan)
- Lorsque vous avez terminé le plat principal, vous pouvez demander au serveur de vous apporter le dessert (commande fg)
Sous Linux, ce mécanisme de bascule des tâches entre le premier plan et l'arrière-plan vous permet de :
- Contrôler de manière flexible l'ordre d'exécution de plusieurs tâches
- Suspendre temporairement la tâche en cours pour gérer des tâches plus urgentes
- Utiliser efficacement les sessions de terminal
Syntaxe de base
fg [作业标识]
Description du paramètre
| Paramètre | Description |
|---|---|
| Aucun paramètre | Reprendre la tâche la plus récemment mise en arrière-plan |
| %n | Reprendre la tâche portant le numéro de tâche n |
| %str | Reprendre la tâche commençant par str |
| %?str | Reprendre la tâche contenant str |
| %+ ou %% | Équivalent à l'absence de paramètre ; reprend la tâche la plus récente |
| %- | Reprendre la deuxième tâche la plus récemment mise en arrière-plan |
Exemples d'utilisation
Exemple 1 : Utilisation de base
Démarrer une tâche de longue durée et la mettre en arrière-plan :
sleep 60 & [1] 12345 # 系统返回作业号 [1] 和进程ID 12345
Afficher la liste actuelle des tâches :
jobs [1]+ 运行中 sleep 60 &
Ramener la tâche au premier plan :
fg %1 # 或者简写为 fg
Exemple 2 : Reprendre une tâche spécifique
Exemple
python script1.py &
python script2.py &
# Afficher la liste des tâches
jobs
[1]- En cours python script1.py&
[2]+ En cours python script2.py&
# Reprendre la première tâche
fg %1
Comment ça marche
Transition d'état de processus
Exemple
A[Exécution au premier plan] -->|Ctrl+Z| B[Suspendu]
B -->|fg| A
B -->|bg| C[Exécution en arrière-plan]
C -->|fg| A
- Processus au premier plan: Occupe le terminal, reçoit les entrées du clavier
- Processus en arrière-plan: N'occupe pas le terminal, ne peut pas recevoir d'entrées
- Processus suspendu: Est suspendu, en attente d'être repris
Mécanisme de signal
Lors de l'exécutionfg:
- Le système envoie à la tâche
SIGCONTsignal (continuer l'exécution) - Définir le groupe de processus de la tâche comme groupe de processus de premier plan du terminal
- Le terminal redirige les entrées/sorties vers le processus
FAQ
Q1 : Comment savoir quels travaux en arrière-plan existent actuellement ?
Utiliserjobscommande pour afficher :
Exemple
Exemple de sortie :
[1]- 12345 运行中 sleep 100 & [2]+ 12346 停止 vim file.txt
Q2 : Quelle est la différence entre fg et bg ?
| Commande | Fonction | Contrôle du terminal |
|---|---|---|
| fg | Amener la tâche au premier plan | Occupe le terminal |
| bg | Laisser la tâche suspendue continuer à s'exécuter en arrière-plan | N'occupe pas le terminal |
Q3 : Pourquoi le programme ne peut-il pas recevoir d'entrée après fg ?
Il se peut que le programme soit suspendu (affiché comme « arrêté ») ; vous devez d'abord envoyer un signal de reprise :
Exemple
fg %1
Scénarios d'application pratiques
Scénario 1 : Développement et débogage
>Démarrez le serveur de développement :
Exemple
# Appuyez sur Ctrl+Z pour suspendre
[1]+ Arrêté python manage.py runserver
Exécutez temporairement d'autres commandes
Reprenez le serveur :
Exemple
Scénario 2 : Édition de fichiers
Exemple
# Appuyez sur Ctrl+Z pour suspendre l'édition
# Afficher le contenu du fichier
cat related_file.txt
# Revenir à l'édition
fg
Notes
- Association au terminal: Les tâches en arrière-plan sont associées au terminal qui les a lancées ; fermer le terminal mettra fin aux tâches
- Interférence de sortie: La sortie d'une tâche en arrière-plan peut soudainement apparaître au premier plan, perturbant le travail en cours
- Limites de permissions: Certains programmes nécessitant une interaction avec le terminal (comme la saisie d'un mot de passe) ne peuvent pas s'exécuter en arrière-plan
- Réutilisation des numéros de tâche: Les numéros de tâche sont uniques au sein d'une session, mais les différentes sessions de terminal sont comptées indépendamment
Astuces avancées
Utilisation avec nohup
Laisser la tâche s'exécuter en arrière-plan de manière persistante (même si vous quittez le terminal) :
Exemple
# Vous pouvez vous reconnecter et reprendre plus tard
fg %1
Utilisation de disown pour détacher
Exemple
jobs -l # Notez le numéro de tâche
disown %1 # Détacher du terminal
# Vous pouvez maintenant fermer le terminal en toute sécurité