Comment démarrer la commande Linux en arrière-plan et détacher le processus dans le terminal

Comment démarrer la commande Linux en arrière-plan et détacher le processus dans le terminal
Dans ce guide, nous apprendrons à exécuter une commande en arrière-plan et à détacher les processus du terminal.

Conditions préalables:

Pour effectuer les étapes de ce guide, vous avez besoin des composants suivants:

  • Un système Linux fonctionnel. En savoir plus sur la configuration d'une machine virtuelle Ubuntu sur VirtualBox.
  • Accès à un utilisateur non root avec autorisation sudo.

Exécuter les processus à partir du terminal

Chaque fois que l'exécution d'une commande, les processus sont engendrés sous le terminal. Si le terminal est fermé, tous les processus associés sont automatiquement résiliés. Dans certaines situations, cela peut être gênant. Par exemple:

  • Quantité écrasante de données de sortie et d'erreur / messages de diagnostic
  • Fermeture accidentelle du terminal qui entraîne la fin des processus potentiellement critiques, etc.

Pour résoudre ces problèmes, il existe quelques options:

  • Exécuter les processus en arrière-plan
  • Détacher les processus du terminal

Les processus qui s'exécutent en arrière-plan ne submergeront pas la sortie terminale. De plus, le terminal est libre d'exécuter les commandes supplémentaires. Pour les processus détachés, ils ne se termineront pas même si le terminal est fermé.

Démarrer les processus en arrière-plan

Dans de nombreux cas, une commande peut prendre un certain temps pour terminer. Généralement, l'utilisateur est obligé d'attendre jusqu'à la fin de la commande. Par exemple, lorsque vous utilisez un éditeur de texte, le shell n'est pas disponible jusqu'à ce que l'éditeur soit fermé.

Pour démontrer, nous utilisons la commande «oui»:

$ man oui

Méthode 1:

Il y a quelques façons où nous pouvons envoyer le processus en cours d'exécution à l'arrière-plan.

Premièrement, nous arrêtons le processus sans le terminer. Pour ce faire, exécutez la commande suivante et appuyez sur «Ctrl + Z»:

$ Oui "Hello World"> / dev / null

Maintenant, exécutez la commande «BG» pour envoyer le processus en arrière-plan:

$ bg

Une fois poussé en arrière-plan, le processus reprend. La commande suivante répertorie tous les travaux en cours d'exécution:

$ Jobs

Méthode 2:

Dans la méthode précédente, le processus a commencé à fonctionner au premier plan. Nous avons arrêté le processus, l'avons envoyé à l'arrière-plan, puis nous l'avons repris. Au lieu de cela, nous pouvons exécuter le processus directement en arrière-plan.

Pour ce faire, ajoutez le signe «&» à la fin de la commande:

$ oui "Oh long Johnson"> / dev / null &

Ici, les processus engendrés s'exécutent automatiquement en arrière-plan. Pour vérifier, vérifiez la liste des travaux d'arrière-plan:

$ Jobs

Méthode 3:

Nous pouvons également lancer les processus en arrière-plan à l'aide de TMUX, un puissant multiplexeur qui peut gérer plusieurs séances de terminal dans une seule fenêtre. Il ne vient pas préinstallé dans Linux. Cependant, il est disponible pour toutes les principales distros Linux. En savoir plus sur l'installation de TMux sur Linux.

Dans l'exemple suivant, nous utilisons TMUX pour cingler une cible et enregistrer la sortie:

$ tmux new -d 'ping -c 9 127.0.0.1> ping.enregistrer'

Le fichier journal vérifie si la commande s'exécute avec succès ou non:

$ cat ping.enregistrer

Ce n'est qu'un exemple de ce que TMUX peut faire. En savoir plus sur TMUX avec des exemples.

Retourner les emplois au premier plan

Si vous souhaitez retourner un emploi au premier plan, nous utilisons la commande «FG». Nous avons également besoin du numéro de travail de la commande Jobs.

Tout d'abord, déterminez le travail que vous souhaitez apporter au premier plan:

$ Jobs

Maintenant, utilisez la commande «FG»:

$ fg%

Détacher les processus du terminal

Tout processus associé à un terminal est terminé une fois le terminal se ferme, qu'il fonctionne au premier plan ou en arrière-plan. Pour éviter la terminaison du processus, nous dissocons le processus cible à partir du terminal / coquille.

Méthode 1:

Pour renier un processus, nous avons d'abord besoin d'un processus de fond:

$ oui "qwerty"> / dev / null &

Vérifiez la liste des travaux d'exécution des antécédents:

$ Jobs

Notez le numéro de série du travail d'arrière-plan cible. Maintenant, utilisez la commande «Diet» pour le détacher du terminal:

$ Diet%

Le travail cible devrait désormais disparaître de la liste des emplois:

$ Jobs

Cependant, vous pouvez toujours voir le processus s'exécuter en arrière-plan:

$ ps aux

Méthode 2:

Une autre façon de détacher un processus du terminal parent est d'utiliser la commande «noHup». Il maintient un processus en marche en arrière-plan même après la fermeture du terminal.

L'utilisation de «Nohup» est la suivante:

$ nohup &

Vérifiez si le travail est créé avec succès:

$ Jobs

Méthode 3:

Cette méthode détache complètement le processus cible. C'est un moyen plus efficace de détacher les applications GUI.

Par exemple, pour démarrer le Firefox et le détacher complètement du terminal, utilisez la commande suivante:

$ firefox / dev / null &

Ici:

  • Le / dev / null est un dispositif spécial de Linux qui se débarrasse de toutes les données qui y sont écrites.
  • Dans la commande précédente, l'entrée est lue et la sortie est envoyée à / dev / null. En savoir plus sur les autres façons d'utiliser le / dev / null.

Conclusion

Nous avons démontré les différentes façons d'exécuter un processus en arrière-plan. Nous avons également présenté les moyens de détacher un processus du terminal parent. Ces techniques peuvent être utiles chaque fois que vous travaillez avec le terminal ou l'exécution d'un script.

Si vous devez exécuter certaines commandes dans un modèle spécifique, nous pouvons le décharger en tant que service SystemD. Pour les machines distantes, nous pouvons également utiliser les outils tiers comme ANSIBLE pour automatiser presque tout.

Happy Computing!