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