2013-02-28 4 views
0
stop() 
{ 
sh stop.sh 
ret_code=$? 
<1>echo ret_code is $ret_code 
} 

once=true 
while $once 
do 
stop & PID=$! 
<2>echo ret_code is $ret_code 
sleep 2m 
<3>echo ret_code is $ret_code 
if [ $ret_code == 0 ] 
then 
break 
else 
kill $PID 
fi 
done 

ret_code à < 1> est 0code de retour Unix change après la commande du sommeil

ret_code à < 2> n'imprime pas

ret_code à < 3> est vide

Quelqu'un pourrait-il dire pourquoi la valeur de ret_code est modifiée pendant et après la commande sleep?

EDIT:

J'ai essayé une autre approche. Il a travaillé -

#! /bin/sh 

once=true 
while $once 
do 
sh stop.sh & PID=$! 
sleep 2m 
kill $PID 
if [ $? != 0 ] 
then 
echo stop has completed successfully within the time limit 
echo starting ... 
sh start.sh 
break 
fi 
done 
+0

1) Qu'est-ce que stop.sh à la ligne 3? –

+0

2) Pouvez-vous ajuster les instructions d'écho pour inclure "1.", "2." etc et inclure la sortie du script s'il vous plaît? –

+0

@AshBerlin C'est un autre script shell qui arrête réellement les services. Il fonctionne généralement bien, donc rc est généralement 0. Mais parfois il est bloqué, et donc cette façon complexe d'écrire un simple processus stop/start – Jay

Répondre

1

stop, en tant que processus d'arrière-plan, fonctionne dans un sous-shell, de sorte que la valeur de ret_code qu'il définit est différent de celui que vous archivez < 2> et < 3> (qui doit être identique , car sa valeur n'est pas affectée par la commande sleep).

+0

Je vois! Est-il possible d'utiliser la variable dans le sous-shell alors? – Jay

+0

Ignorer le commentaire stupide précédent :) - Je pourrais juste exporter la variable du sous-shell à utiliser dans le shell principal droit? – Jay