Sitedetout - Tutoriels informatiques

Lancer/déplacer un processus en arrière-plan sous Linux

Sous Linux, un processus désigne un programme en cours d’exécution. Concrètement, le lancement de chaque commande démarre un processus.

On peut démarrer un processus de deux manières :

  • Forground process : Processus attaché au terminal actif.
  • Background process : Processus en arrière-plan / tâche de fond.

Dans la suite de l’article, on suppose l’utilisation du shell bash.

Lancement d’un processus en arrière-plan :

Utilisation du caractère & :

Pour lancer un processus en arrière-plan, il suffit de rajouter le caractère & à la fin de la commande.

Une simple commande sleep poura nous service d’exemple. Toutefois, je préfère utiliser le script de start par défaut du serveur d’administration Weblogic :

[oracle@localhost bin]$ ./startWebLogic.sh &
….
Notice WebLogicServer BEA-000365 Server state changed to STARTING.
Notice WebLogicServer BEA-000365 Server state changed to RUNNING.

En utilisant ctrl+c, le processus continuera à fonctionner et on peut le constater en utilisant la commande ps :

[oracle@localhost bin]$ ps -ef | grep weblogic | grep -v grep | wc -l 
2 

Par contre, si vous fermez votre terminal, le processus sera arrété. En effet, si l’option shell/bash huponexit était activée lors du lancement du processus Weblogic, un exit de la session déclenchera un signal SIGHUP vers tout les processus lancés en tâche de fond.

Commandes utiles pour gérer le paramètre huponexit :

shopt huponexit : Vérification de l’état du paramètre huponexit
shopt -s huponexit : Activation du paramètre huponexit
shopt -u huponexit : Désactivation du paramètre huponexit
[oracle@localhost bin]$ exit
logout
[root@localhost ~]# Notice WebLogicServer BEA-000388 JVM called the WebLogic Server shutdown hook. The server will force shutdown now.
Notice WebLogicServer BEA-000396 Server shutdown has been requested by WLS Kernel.

On remarque que le serveur Weblogic a été arrêté après l’exécution de la commande exit.

Utilisation de la commande nohup :

Pour que le processus continu à tourner même après la fermeture du terminal, vous devez utiliser la commande NOHUP comme suit :

[oracle@localhost bin]$ nohup ./startWebLogic.sh &
[1] 55115
[oracle@localhost bin]$ nohup: ignoring input and appending output to ‘nohup.out’
^C
[oracle@localhost bin]$ exit
logout
[root@localhost ~]# ps -ef |grep weblogic |wc -l
5

Le processus lancé ne sera associé à aucun terminal. La commande nohup redirigera donc les sorties standard et d’erreur du processus vers un fichier nohup.out qui sera créé dans le répertoire courant. Le processus fonctionnera toujours après un exit de la session courante.

Que faire si on a oublié de lancer un script en arrière-plan ?

Il est vrai qu’il se peut qu’on ait oublié d’exécuter une commande ou un script en tâche de fond et qu’on ne veuille pas interrompre son traitement, mais heureusement, plusieurs commandes Linux permettent de gérer cette situation sans avoir à arrêter le processus associé. Il suffit de suivre les étapes suivantes :

  1. Suspendre le processus en utilisant le raccourci Ctrl+Z : Ceci permet d’envoyer un signal SIGSTOP au processus. Ainsi, le système n’allouera plus de temps CPU et son état deviendra idle (On peut décrire cet état comme si le processus est en pause).
  2. la commande jobs : Elle permet de lister l’ensemble des jobs attachés à la session courante et leurs status.
  3. Reprendre le processus en arrière plan grâce à la Commande bg : Cette commande permet de reprendre/relancer les processus suspendus et les lancer comme tâche de fond.
  4. Utiliser la commande disown : Cette commande permet de marquer le job de manière à ce que le signal SIGHUP ne lui est pas envoyé suite à un exit de la session.

Cette séquence peut être appliquée pour notre processus Weblogic de la manière suivante :

[oracle @localhost bin]$ ./startWebLogic.sh
…
Notice WebLogicServer BEA-000360 The server started in RUNNING mode.
Notice WebLogicServer BEA-000365 Server state changed to RUNNING.
^Z    ==> Utilisation du raccourci crtl +z
[1]+  Stopped                 ./startWebLogic.sh
[oracle @localhost bin]$ bg 1  ==> Reprise du processus en arrière plan
[1]+ ./startWebLogic.sh &
[oracle@localhost bin]$ disown %1  ==> Dissociation du processus du terminal courrant
[oracle @localhost bin]$ exit
logout
[root@localhost ~]#

En vérifiant encore une fois moyennant la commande ps, on s’aperçoit que le processus Weblogic fonctionne toujours.

ps -ef | grep weblogic |grep -v grep |wc -l
2


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

WP2Social Auto Publish Powered By : XYZScripts.com
Chargement...
Menu Title

Powered by themekiller.com