Cookie

Envoyer un processus en arrière-plan et au premier plan avec Linux

Publié par TheJoe sur

Temps de lecture estimé: 2 minutes

Attention


Cet article a été publié il y a plus d'un an, il peut y avoir des développements été.
S'il vous plaît prendre en compte.

Il y a quelques articles nous avons parlé de screen: une application en ligne de commande qui permet de créer des sessions virtuelles contenant des fenêtres de terminal virtuel auxquelles on peut se connecter ou se déconnecter à volonté via la session de terminal en cours.

Screen est un programme très puissant, intuitif après quelques utilisations, qui peut faire beaucoup de choses (et en fait les raccourcis sont nombreux et trop nombreux pour être listés), mais aujourd'hui on parle des sessions classiques.

Dans ce cas également une commande peut durer plusieurs minutes, voire des heures. Il faut donc un système pour libérer le terminal et exécuter de nouvelles commandes, laissant les anciens fonctionner en arrière-plan.

Démarrer un processus en arrière-plan

Supposons que nous ayons un processus qui, une fois fait, occupe la session du terminal et nous empêche d'exécuter d'autres commandes jusqu'à la fin de l'exécution. Par exemple, au cas où votre disque de données est volumineux et plein de données updatedb cela peut prendre beaucoup de temps pour compléter l'index du fichier.

~# updatedb

Nous avons deux solutions.

Utilisez le “et – commercial” (&)

La première méthode consiste simplement à ajouter un & à la fin de la commande. Le processus passera automatiquement en arrière-plan, la coquille sera libérée et pourra être utilisée immédiatement.

~# updatedb &
[1] 342824
~#

Dans ce scénario, ainsi que la mise à disposition immédiate du terminal, la commande renvoie le numéro d'identification du processus (PID) avec lequel nous pouvons surveiller l'état d'exécution via la commande ps.

~# ps ax | grep updatedb
342824 pts/2 S 0:00 /bin/sh /usr/bin/updatedb
~#

Utilisez le raccourci Ctrl+Z et la commande bg

Cette méthode est encore plus intéressante que la première, car même si nous n'attendons pas la commande, cela peut geler le terminal pendant longtemps, nous pourrons mettre le processus en pause et l'envoyer en arrière-plan pour continuer l'exécution.

~# updatedb
^Z                       # Here i clicked Ctrl+Z
[2]+ Fermato updatedb
~# bg
[2]+ updatedb &
~#

Ci-dessus, j'ai exécuté à nouveau la commande updatedb, Je l'ai mis en pause avec le raccourci Ctrl+Z, j'ai exécuté la commande bg pour mettre la commande en pause en arrière-plan.

Regardez ici:  Transfert de fichiers volumineux rapidement sur le réseau avec Netcat

Une liste des processus d'arrière-plan

Cela, mais je ne veux pas perdre le contrôle. Combien et quels processus j'ai envoyés en arrière-plan?

:~# jobs
[1]- In esecuzione sleep 500 &
[2]+ In esecuzione updatedb &
~#

Pour reprendre un processus, nous utilisons la commande fg avec le numéro relatif au processus que nous voulons restaurer.

~# jobs
[1]-  In esecuzione           sleep 500 &
[2]+  In esecuzione           updatedb &
~# fg %2
updatedb

Bien sûr, nous pouvons remettre la commande qui vient d'être restaurée en arrière-plan avec Ctrl+Z et bg nous fermant dans une boucle éternelle.

Rendre un processus persistant même lorsque le shell est fermé

Lorsqu'un processus a été mis en arrière-plan par une session, lorsque la session est fermée, le processus se terminera également. Cet aspect peut poser problème notamment dans le cas de connexions instables (SSH).

Le plus simple dans ce cas est d'utiliser screen, mais en général, si ce n'est pas ce que nous voulons, nous pouvons faire en sorte qu'un processus persiste même après la fermeture de la session simplement à partir de la session avec la commande nohup.

Cette commande est immunisée contre les raccrochages et peut ignorer les signaux SIGHUP émis vers un processus.

La commande nohup il doit être utilisé avant le processus que nous voulons “déconnecter”.

~# nohup updatedb &

Nous pouvons maintenant terminer la session en cours, ouvrez un autre terminal et vérifiez que le processus est toujours en cours d'exécution avec ps ax | grep updatedb.


TheJoe

Je garde ce blog comme un hobby par 2009. Je suis passionné de graphisme, la technologie, logiciel Open Source. Parmi mes articles ne sera pas difficile de trouver de la musique, et quelques réflexions personnelles, mais je préfère la ligne directe du blog principalement à la technologie. Pour plus d'informations me contacter.

0 commentaires

Laisser un commentaire

Espace réservé d'avatar

Votre adresse email ne sera pas publiée. les champs requis sont indiqués *

Ce site utilise Akismet pour réduire le spam. Découvrez comment vos données de commentaire est traité.