Rentrer une commande qui se répète en boucle et en sortir

Résolu/Fermé
Dr snake - 1 nov. 2016 à 21:41
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 - 4 nov. 2016 à 08:08
Bonjour,

Je souhaite lancer une commande interactive en boucle, prenons l'exemple avec htop qui est un moniteur interactif.Disons que je souhaite le lancer toute les 30 minutes par exemple mais qu'il n'est pas la dernière commande (ni fonction) du programme a éxécuter, comment dois-je faire ?

Le principe serait le suivant:

while : ; do
htop; sleep 1800;
done


Mais après cette commande comment poursuivre le programme est appeler une autre fonction ?
Ce qui serait idéal pour moi ça serait quelque chose comme ça:
while : ; do
htop; sleep 1800;
done
f_on part sur une autre fonction du programme une fois la commande lancée


Mais pour cela ça nécessite d'indiquer au script que je veux continuer a avancer tout en lançant la commande htop en arrière plan tout les 30 minutes, et ça... je sais pas comment faire pour lui indiquer de ne pas s'arreter uniquement a la boucle.

Voila, merci.


4 réponses

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
2 nov. 2016 à 08:28
hello
( while : ; do
htop; sleep 1800;
done ) &
f_on part sur une autre fonction du programme une fois la commande lancée
1
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
2 nov. 2016 à 10:25
pas besoin des ()
while : ; do
htop; sleep 1800;
done &
f_on part sur une autre fonction du programme une fois la commande lancée
0
J'ai réussi a sortir de la boucle mais du coup htop ne se lance plus tout les 30 minutes, voici mon code:

 echo -e "Entrée dans la boucle"
while : ; do
xterm -e htop sleep 1800 &
PID=$!
if [[ $! != 0 ]]; then
f_fonctionsuivante
break
fi
echo "Erreur lors du lancement de htop"
done
echo "On quitte la boucle et on passe a la fonction suivante"
sleep 2;
}


Evidemment je suppose que c'est car j'indique que mon PID est différent de 0 pour sortir.Donc je me retrouve maintenant avec le problème inverse, je sors trop brutalement de ma boucle.Ne faudrait-il pas filtrer avec le nom du process plutot que le PID ? on vérifie que le PID est bien présent et si c'est la cas on passe a autre chose ?

Merci
0
Merci de ta réponse dubcek, la boucle se lance et j'ai accès a la fonction suivante du script :)

Par contre il reste un soucis, si je veux stopper htop car les paramètres me conviennent tout en restant dans le script ça ne marche pas (meme avec kill -9), il faut que je quitte le script pour que le process s'arrete (j'ai fais la vérif avec ps -ef).Comment je dois gérer ma boucle si je veux la stopper plus tard sans avoir a sortir su script ?

Merci
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
3 nov. 2016 à 09:09
sauver le PID
echo $$ > /tmp/pid

et plus tard
kill $(cat /tmp/pid)
0
Génial ça marche, dernière question et j'embete plus, si il y a plusieurs boucle a arréter je stocke tout dans un fichier.pid différent ou je peux faire un fichier global pour l'ensemble des boucles ? ou sinon un truc du genre, pour stopper tout les fichier.pid a la fois, peut-etre ça ?

for PID in $( ps -e | pgrep *pid | awk '{print $1;}' ); do kill ${PID} 2>&-; done


Merci en tout cas car ça m'a enlevé une bonne épine du pied cette astuce :)
0
dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
4 nov. 2016 à 08:08
ou
echo $$ > /tmp/pid$RANDOM

et
kill $(cat /tmp/pid*); rm -f /tmp/pid*
0