Recherche de site Web

Comprendre les processus de premier plan et d’arrière-plan sous Linux


En tant qu’administrateur système Linux, vous pouvez parfois vouloir exécuter des processus en arrière-plan pour continuer à travailler dans votre terminal de ligne de commande pendant que le processus d’arrière-plan termine son travail. Les systèmes Linux permettent l’exécution simultanée de processus et la possibilité d’exécuter des programmes au premier plan et en arrière-plan.

L’exécution de commandes ou de processus en arrière-plan sur un système Linux devient une tâche courante si vous devez libérer votre terminal ou vous déconnecter d’une session SSH. C’est particulièrement vrai pour les commandes qui s’exécutent pendant une longue période, soit pour écouter des événements, soit pour accomplir leur longue tâche.

Nous avons quelques options sur Linux pour exécuter des commandes en arrière-plan. Dans ce tutoriel, nous allons aborder quelques méthodes différentes et vous montrer comment les utiliser à l’aide d’exemples. Vous apprendrez également à déplacer un processus du premier plan à l’arrière-plan et vice versa.

Dans ce tutoriel, vous allez apprendre :

  • Comment mettre une commande en cours d’exécution en arrière-plan
  • Comment démarrer une commande en arrière-plan
  • Comment fermer le terminal et maintenir la tâche d’arrière-plan en cours d’exécution
  • Comment utiliser la commande d’écran

Mettre une commande en cours d’exécution en arrière-plan

Lorsque vous exécutez une commande qui souhaite continuer à s’exécuter pendant une longue période, le problème est que votre terminal actuel est dédié à la commande. Vous ne pouvez pas continuer à utiliser le terminal, et vous ne pouvez pas non plus le fermer, car cela mettrait fin à la commande en cours d’exécution.

Si vous avez une commande en cours d’exécution et que vous devez la mettre en arrière-plan pour libérer votre terminal, vous pouvez appuyer sur Ctrl + Z sur votre clavier pour arrêter le processus. Voici un exemple.

sleep 10000
^Z
[1]+  Stopped                 sleep 10000

Pour afficher la liste des travaux en arrière-plan, utilisez la commande travaux.

jobs -l
[1]+  1650 Stopped                 sleep 10000

Pour remettre une tâche au premier plan, nous pouvons utiliser la commande fg.

fg

Si nous avions plusieurs tâches arrêtées, nous devrions utiliser un signe de pourcentage et spécifier l’ID de la tâche pour ramener la tâche appropriée au premier plan.

fg %1

Super, maintenant nous pouvons mettre les processus en arrière-plan et les ramener quand nous le voulons plus tard. Mais que se passe-t-il si nous voulons que la commande continue à s’exécuter pendant qu’elle est en arrière-plan ? Pour cela, nous pouvons utiliser la commande bg, suivie d’une esperluette et de l’ID de la tâche. La commande suivante fera reprendre notre travail arrêté, tout en le gardant en arrière-plan.

bg %1
[1]+ sleep 10000 &

Maintenant, nous pouvons voir que le processus est toujours en arrière-plan, mais il affiche un statut « en cours d’exécution » au lieu de « arrêté ». ”

jobs -l
[1]+  1650 Running                 sleep 10000 &

Il y a encore une chose à garder à l’esprit. Vous ne pouvez pas fermer votre terminal actuel, sinon ces travaux d’arrière-plan seront fermés. Si vous devez fermer votre terminal et que vous ne voulez pas que ces commandes s’arrêtent, vous devez « désavouer » le ou les travaux. Si vous n’avez qu’une seule tâche en arrière-plan, la commande suivante fonctionnera :

disown

Si vous en avez plusieurs, vous devez spécifier l’ID de la tâche.

disown %1

Vous ne verrez plus le travail dans votre table des travaux lorsque vous exécutez la commande jobs. Maintenant, il est sûr de fermer le terminal et votre commande continuera à s’exécuter.

jobs -l

Vous pouvez toujours garder un œil sur votre commande en cours d’exécution à l’aide de la commande ps.

ps aux | grep sleep
linuxco+    1650  0.0  0.0   8084   524 pts/0    S    12:27   0:00 sleep 10000

Et si vous souhaitez arrêter l’exécution de la commande, vous pouvez utiliser la commande kill et spécifier l’ID du processus.

kill 1650

Démarrer une commande en arrière-plan

Nous avons maintenant vu comment mettre un processus en cours d’exécution en arrière-plan et le rappeler plus tard. Mais nous avons également la possibilité de démarrer la commande en arrière-plan au début. Tout ce que vous avez à faire est de mettre une esperluette à la fin de n’importe quelle commande Linux.

sleep 10000 &
[1] 1900

Tout comme précédemment, nous pouvons voir le travail répertorié avec la commande jobs. Cette fois, cependant, le travail est déjà en cours d’exécution et nous n’avons pas eu à le démarrer manuellement en arrière-plan.

jobs -l
[1]+  1900 Running                 sleep 10000 &

Fermez le terminal et maintenez la tâche d’arrière-plan en cours d’exécution

Nous avons déjà vu dans un exemple précédent comment nous pouvons utiliser la commande disown pour nous assurer que la commande continue de s’exécuter après la fermeture de notre terminal. Une autre option est la commande nohup.

nohup indique à un processus d’ignorer tous les signaux SIGHUP (raccrocher) qu’il reçoit. Le signal SIGHUP est envoyé à une tâche d’arrière-plan chaque fois que le terminal actuel est fermé. Ainsi, nous pouvons avoir une tâche en arrière-plan, fermer le terminal et la voir toujours fonctionner en arrière-plan. Voici un exemple.

nohup sleep 10000 &
[1] 1908
nohup: ignoring input and appending output to 'nohup.out'

Nous avons fermé le terminal et l’avons rouvert, puis nous avons exécuté la commande suivante, ce qui montre que la commande est toujours en cours d’exécution.

ps aux | grep sleep
linuxco+    1908  0.0  0.0   8084   524 ?        S    13:05   0:00 sleep 10000

Utilisation de la commande d’écran

Jusqu’à présent, nous avons couvert les méthodes Linux par défaut pour exécuter des commandes en arrière-plan. Cependant, il existe également des progiciels supplémentaires qui peuvent être utilisés. La plus populaire serait peut-être la commande d’écran.

Vous pouvez voir le lien susmentionné pour les instructions d’installation et l’utilisation détaillée, mais l’essentiel est le suivant :

  1. Exécutez la commande screen pour démarrer un nouvel « écran ». Si vous le souhaitez, incluez l’option -S pour lui donner un nom.

    screen -S mycommand
    
  2. Dans la nouvelle session d’écran, exécutez la commande ou le script que vous souhaitez mettre en arrière-plan.

    /path/to/myscript.sh
    
  3. Appuyez sur Ctrl + A sur votre clavier, puis sur D. Cela détachera l’écran, puis vous pourrez fermer le terminal, vous déconnecter de votre session SSH, etc., et l’écran persistera. Pour afficher la liste des écrans, utilisez cette commande.

    screen -ls
    There is a screen on:
    	2741.mycommand	(04/08/2021 01:13:24 PM)	(Detached)
    1 Socket in /run/screen/S-linuxconfig.
    
  4. Pour le rattacher à un écran, utilisez la commande suivante, en remplaçant le numéro ci-dessous par votre propre ID de processus.

    screen -r 2741
    

Réflexions finales

Dans ce tutoriel, nous avons vu plusieurs méthodes différentes pour exécuter une commande en arrière-plan sous Linux. Cela incluait les utilitaires Linux par défaut et la commande screen. Nous avons également vu comment gérer le processus d’arrière-plan en déplaçant les tâches au premier plan, en rattachant les écrans et en supprimant les processus d’arrière-plan.

Articles connexes: