IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Problème process et while


Sujet :

Linux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 103
    Points : 60
    Points
    60
    Par défaut Problème process et while
    Bonjour,

    Je cherche à réaliser un petit script bash qui va lancer un executable. Pour pouvoir lancer cet executable, il ne doit pas exister le même executable tournant déjà sur le système avec un identifiant identique (identifiant interne à l'appli).

    L'utilisateur demande au script de lancer l'executable avec en paramètre l'identifiant du nouveau process à lancer.

    Je voulais mettre en place un petit algo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    start<-true
     
    chercher les process avec le même nom d'executable
    parcourir ces process
       si le process courant à le même identifiant que celui passé en param du script :
             start <- false
       fin si
    fin boucle
     
    si start : lancer un nouveau process avec l'identifiant
    sinon : alerte
    Voici le petit bout de code que j'ai developpé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    start=true
     
    ps -e -o pgid,pid,ucomm,args -u $USER | grep "proxy" |  while read  THE_PGID THE_PID THE_CMD THE_ARGS
    	do
    		if [ "$THE_CMD" == "$EXEC_NAME" ]; then
    			echo "$THE_CMD : $THE_ARGS"
    			# recupère le premier argument
    			ID_PROXY=`echo ${THE_ARGS#* }`
    			ID_PROXY=`echo ${ID_PROXY%% *}`
    			echo "ID_PROXY : $ID_PROXY"
     
    			if [ "$ID_PROXY" = "$1" ];
    			then
    				start='false'
    				echo "Affectation Start : $start"
    			fi
    		fi
    	done
     
    echo "$start"
    Voilà, mais à la sortie de ma boucle, la variable start n'a pas été modifié.
    Je pense que cela vient du fait que le pipe dans la fonction while read créé un nouveau process dont l'enviropnement n'est pas visible du père...

    Est-ce certain d'entre vous on déjà été confronté à ce genre de problème ? Si oui, quelle solution avez vous mis en place pour contourner le problème ?

    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Avatar de vosaray
    Profil pro
    Architecte technique
    Inscrit en
    Mai 2004
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 217
    Points : 299
    Points
    299
    Par défaut
    Si oui, quelle solution avez vous mis en place pour contourner le problème ?
    perl

    Mais en bash tu devrais t'en sortir avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     
    export EXIST_PROCESS=`pgrep <processName> | <processID> `
    if ( "x$EXIST_PROCESS" != "x" )  ; then 
       execute la commande que tu veux
    fi

  3. #3
    Membre actif
    Avatar de vosaray
    Profil pro
    Architecte technique
    Inscrit en
    Mai 2004
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2004
    Messages : 217
    Points : 299
    Points
    299
    Par défaut
    Il faut bien entedu lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    
    export EXIST_PROCESS=`pgrep <processName> | grep <processID> `
    if [ "x$EXIST_PROCESS" != "x" ]  ; then 
       execute la commande que tu veux
    fi

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/11/2013, 15h33
  2. [Débutant] Sorry an error occured while processing your request
    Par mine87 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/02/2012, 15h17
  3. Réponses: 0
    Dernier message: 12/12/2011, 18h07
  4. Réponses: 3
    Dernier message: 09/06/2011, 15h30
  5. Réponses: 1
    Dernier message: 23/12/2009, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo