Généralement, lorsque vous exécutez une commande dans le terminal, vous devez attendre la fin de la commande avant de pouvoir en saisir une autre. Cela s'appelle exécuter la commande dans le processus de premier plan ou de premier plan. Lorsqu'un processus s'exécute au premier plan, il occupe votre shell et vous pouvez interagir avec lui à l'aide des périphériques d'entrée.
Que se passe-t-il si la commande prend beaucoup de temps à se terminer et que vous souhaitez exécuter d'autres commandes entre-temps ? Vous avez plusieurs options à votre disposition. L'option la plus évidente et la plus simple consiste à démarrer une nouvelle session shell et à y exécuter la commande. Une autre option consiste à exécuter la commande en arrière-plan.
Un processus d'arrière-plan est un processus/une commande qui est démarré à partir d'un terminal et s'exécute en arrière-plan, sans interaction de l'utilisateur.
Dans cet article, nous parlerons des processus d'arrière-plan sous Linux. Nous allons vous montrer comment démarrer une commande en arrière-plan et comment maintenir le processus en cours après la fermeture de la session shell.
Exécuter une commande Linux en arrière-plan #
Pour exécuter une commande en arrière-plan, ajoutez le symbole esperluette (&
) à la fin de la commande :
command &
L'ID de tâche shell (entouré de crochets) et l'ID de processus seront imprimés sur le terminal :
[1] 25177
Plusieurs processus peuvent s'exécuter en arrière-plan en même temps.
Le processus d'arrière-plan continuera à écrire des messages sur le terminal à partir duquel vous avez appelé la commande. Pour supprimer la stdout
et stderr
les messages utilisent la syntaxe suivante :
command > /dev/null 2>&1 &
>/dev/null 2>&1
signifie rediriger stdout
à /dev/null
et stderr
vers stdout
.
Utilisez les jobs
utilitaire pour afficher l'état de tous les travaux arrêtés et en arrière-plan dans la session shell en cours :
jobs -l
La sortie inclut le numéro de tâche, l'ID de processus, l'état de la tâche et la commande qui a démarré la tâche :
[1]+ 25177 Running ping google.com &
Pour amener un processus d'arrière-plan au premier plan, utilisez le fg
commande :
fg
Si vous avez plusieurs tâches en arrière-plan, incluez %
et l'ID de la tâche après la commande :
fg %1
Pour terminer le processus en arrière-plan, utilisez le kill
commande suivie de l'ID du processus :
kill -9 25177
Déplacer un processus de premier plan vers l'arrière-plan #
Pour déplacer un processus de premier plan en cours d'exécution en arrière-plan :
- Arrêtez le processus en tapant
Ctrl+Z
. - Déplacez le processus arrêté en arrière-plan en tapant
bg
.
Garder les processus d'arrière-plan en cours d'exécution après la sortie d'un shell #
Si votre connexion est interrompue ou si vous vous déconnectez de la session shell, les processus d'arrière-plan sont arrêtés. Il existe plusieurs façons de maintenir le processus en cours d'exécution après la fin de la session shell interactive.
Une façon consiste à supprimer le travail du contrôle des travaux du shell en utilisant le disown
shell intégré :
disown
Si vous avez plusieurs tâches en arrière-plan, incluez %
et l'ID de la tâche après la commande :
disown %1
Confirmez que la tâche est supprimée de la table des tâches actives à l'aide de jobs -l
commande. Pour lister tous les processus en cours d'exécution, y compris ceux désavoués, utilisez le ps aux
commande.
Une autre façon de maintenir un processus en cours d'exécution après la sortie du shell consiste à utiliser nohup
.
Le nohup
La commande exécute un autre programme spécifié comme argument et ignore tous les SIGHUP
(raccrocher). SIGHUP
est un signal envoyé à un processus lorsque son terminal de contrôle est fermé.
Pour exécuter une commande en arrière-plan en utilisant le nohup
commande, tapez :
nohup command &
La sortie de la commande est redirigée vers le nohup.out
fichier.
nohup: ignoring input and appending output to 'nohup.out'
Si vous vous déconnectez ou fermez le terminal, le processus n'est pas terminé.
Alternatives #
Il existe un certain nombre de programmes qui vous permettent d'avoir plusieurs sessions interactives en même temps.
Numéro d'écran
Screenor GNU Screen est un programme multiplexeur de terminaux qui vous permet de démarrer une session screen et d'ouvrir un nombre quelconque de fenêtres (terminaux virtuels) à l'intérieur de cette session. Les processus en cours d'exécution dans Screen continueront de s'exécuter lorsque leur fenêtre n'est pas visible, même si vous êtes déconnecté.
Tmux #
Tmux est une alternative moderne à l'écran GNU. Avec Tmux, vous pouvez également créer une session et ouvrir plusieurs fenêtres à l'intérieur de cette session. Les sessions Tmux sont persistantes, ce qui signifie que les programmes exécutés dans Tmux continuent de s'exécuter même si vous fermez le terminal.
Conclusion #
Pour exécuter une commande en arrière-plan, incluez &
à la fin de la commande.
Lorsque vous exécutez une commande en arrière-plan, vous n'avez pas besoin d'attendre qu'elle se termine avant de pouvoir en exécuter une autre.
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.