Exécuter les commandes sous linux en arrière-plan &

-Le symbole & :

Il m’arrive souvent d’utiliser des commandes que je tape sur la console et qui prennent beaucoup de temps pour s’exécuter, par exemple lorsque je lance la commande gzip ou bzip2 pour compresser un gros fichier ou bien lorsque je fait la copie des grosses archives.

Et bien sur, on ne peut pas lancer d’autre commandes sur la même console où la commande est exécuté :

Ici j’ai lancé la commande gzip pour compresser un fichier dont la taille est 3.5Go, et comme vous pouvez le constater je ne peux pas lancer aucune commande tant que la commande gzip est en cours d’exécution.

Certes, Vous pouvez bien sur ouvrir une autre console, mais il y des cas où il vous est impossible de le faire lorsque par exemple vous vous connectez à un serveur linux à distance.

heureusement il existe un moyen pour exécuter les commandes en arrière-plan, c-à-d que la commande  s’exécute sans que cela soit visible.

Il suffit juste d’ajouter le symbole « & » à la fin de la commande, c’est simple n’est-ce pas ;).

Comme ça on n’est plus obligé d’attendre la fin de l’exécution de la commande pour lancer une autre :

Vous pouvez maintenant lacer d’autres commande sans attendre la commande précédente, lancée en arrière-plan, soit terminée  pour reprendre la main sur l’invite de commande ;).

Comme vous pourriez le constatez, deux chiffre sont affichés après avoir lancé la commande en arrière-plan :

[1] : C’est le numéro du processus lancé en arrière-plan, Comme c’est le premier processus que j’ai lancé en arrière-plan, il prend le numéro 1

2908: c’est l’identifiant du processus lancé, abrégé PID  ( Process IDentifier ), comme ça on peut l’arrêter avec la commande kill si l’on souhaite.

Mais comment peut-on savoir si la commande s’est terminé puisque elle est en arrière-plan ?

C’est elle qui va vous informer 😉 :

-CTRL + Z :

Supposant que vous avez oublié d’ajouter le symbole & à la fin d’une commande qui va vous prendre du temps. Que feriez-vous dans ce cas?

Vous avez deux choix, annuler la commande ( CTRL + C ) ou bien prendre une pause et laisser la commande terminer sans travaille.

Heureusement il existe une solution pratique : CTRL + z

En tapant les touches CTRL + Z vous mettez en pause la commande lancée :

une fois CTRL + Z est tapé, une ligne est affiché et vous informe que la commande ( gzip -9 photo dans mon cas ) est dans un état de pause ( stopped ) avec son numéro ([1]).

Notre commande est pour l’instant ne s’exécute pas elle est juste en pause. Comment alors la faire exécuter en arrière-plan ? C’est en utilisant la commande bg

La commande bg :

La commande bgbackground ) permet d’exécuter une commande, qui est en pause avec CTRL+Z, en arrière-plan.

Revenant à notre exemple de tout à l’heure :

Après avoir mis en pause notre commande et pour la faire passer notre en arrière-plan il suffit de taper la commande bg :

Et c’est tout, notre commande maintenant a repris son exécution mais cette fois-ci en arrière-plan.

-La commande fg :

Contrairement à bg, la commande fg (foreground) reprend un processus, lancé en arrière-plan, au premier-plan.

-Si vous avez lancé seulement un processus en arrière-plan, il suffit de taper fg

-Par contre si vous en avez lancé plusieurs, vous devez indiquer à fg lequel des processus vous voulez reprendre en premier plan par son numéro :

Comme vous pouvez le constater, j’ai lancé deux commandes en arrière-plan, ensuite j’ai demandé à fg de mettre la 2ème commande en premier-plan en utilisant le symbole %.

-La commande nohup :

Si vous lancez un processus qui prend beaucoup du temps pour se terminer que ce soit en arrière-plan ou en premier-plan et vous fermez la console ou vous vous déconnecter de la session, le processus s’arrête automatiquement car elle est attaché à la console.

Pour que le processus ne s’arrête pas même après avoir fermé la console  ou que l’utilisateur se déconnecte il fat utiliser la commande nohupe :

Comme ça vous pouvez vous déconnecter de la machine et aller faire autre chose tranquillement ;).