Android

Comment exécuter des commandes Linux en arrière-plan

Ligne de commandes Linux - partie 3 - Gestion de processus

Ligne de commandes Linux - partie 3 - Gestion de processus

Table des matières:

Anonim

En règle générale, 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 met beaucoup de temps à se terminer et que vous souhaitez exécuter d'autres commandes entre-temps? Vous disposez de plusieurs options. 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 / commande qui est démarré à partir d'un terminal et s'exécute en arrière-plan, sans interaction de l'utilisateur., nous allons parler des processus d'arrière-plan est Linux. Nous allons vous montrer comment démarrer une commande en arrière-plan et comment maintenir le processus en cours d'exécution après la fermeture de la session shell.

Exécutez 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 du travail du shell (entouré de crochets) et l'ID du processus seront imprimés sur le terminal:

25177

Vous pouvez avoir plusieurs processus en cours d'exécution 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 les messages stdout et stderr utilisez la syntaxe suivante:

command > /dev/null 2>&1 &

>/dev/null 2>&1 signifie rediriger stdout vers /dev/null et stderr vers stdout .

Utilisez l'utilitaire de jobs pour afficher l'état de tous les travaux arrêtés et d'arrière-plan dans la session shell actuelle:

jobs -l

La sortie inclut le numéro de travail, l'ID de processus, l'état du travail et la commande qui a démarré le travail:

+ 25177 Running ping google.com &

Pour mettre un processus d'arrière-plan au premier plan, utilisez la commande fg :

fg

fg %1

Pour terminer le processus d'arrière-plan, utilisez la commande kill suivie de l'ID du processus:

kill -9 25177

Déplacer un processus de premier plan en arrière-plan

Pour déplacer un processus de premier plan en cours en arrière-plan:

  1. Arrêtez le processus en tapant Ctrl+Z Déplacez le processus arrêté en arrière-plan en tapant bg .

Maintenir les processus d'arrière-plan en cours d'exécution après la fermeture d'un shell

Si votre connexion tombe ou que vous vous déconnectez de la session shell, les processus d'arrière-plan sont interrompus. Il existe plusieurs façons de maintenir le processus en cours après la fin de la session shell interactive.

Une façon consiste à supprimer le travail du contrôle des travaux du shell à l'aide du module intégré shell désavoué:

disown

disown %1

Confirmez que le travail est supprimé de la table des travaux actifs à l'aide de la commande jobs -l . Pour répertorier tous les processus en cours d'exécution, y compris les désavoués, utilisez la commande ps aux .

Une autre façon de maintenir un processus en cours d'exécution après la sortie du shell est d'utiliser nohup .

La commande nohup exécute un autre programme spécifié comme argument et ignore tous les signaux SIGHUP (raccrochage). SIGHUP est un signal qui est envoyé à un processus lorsque son terminal de commande est fermé.

Pour exécuter une commande en arrière-plan à l'aide de la commande nohup , tapez:

nohup command &

La sortie de la commande est redirigée vers le fichier nohup.out .

nohup: ignoring input and appending output to 'nohup.out'

Alternatives

Il existe un certain nombre de programmes qui vous permettent d'avoir plusieurs sessions interactives en même temps.

Écran

Screen ou GNU Screen est un programme de multiplexage de terminal qui vous permet de démarrer une session d'écran et d'ouvrir un nombre illimité de fenêtres (terminaux virtuels) à l'intérieur de cette session. Les processus s'exécutant 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 s'exécutant 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 à attendre qu'elle se termine avant de pouvoir en exécuter une autre.

nohup fg bg jobs disown terminal