Boucle while et fonction test

Résolu/Fermé
Toff - 10 avril 2008 à 22:17
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 11 avril 2008 à 09:26
Bonjour,

Voici mon problème :

Je voudrais connaitre la mémoire maximum utilisée par un process en particulier au cours du temps. Le process correspond à un calcul élément finis et par conséquent à chaque calcul lancé correspond un nouveau PID.

Mon idée est la suivante: après avoir lancé le calcul, je récupère son PID (via un top par exemple) et je le met dans le script. Ce script doit, tant que le process existe, aller chercher, disons toutes les 30s, dans le fichier /proc/#PID/status la ligne VmPeak et l'écrire dans un fichier de sortie.

En fouillant un peu sur le net, j'ai vu que la boucle "while" pourrait correspondre à mon besoin pour les itérations, et la fonction test pour tester l'existance du process. Ensuite je pense qu'une fonction sleep devrait suffire pour l'attente de 30s.

Seulement voilà je ne connais pas les commandes linux et donc je galère pas mal. J'ai essayé de faire la commande suivante :

while [ -f /proc/#PID/status ]; do sleep 30; grep "VmPeak" /proc/#PID/status > memory_max; done

Mais il ne se passe rien... Une idée svp ?

J'ai remarqué que la commande "test -f /proc/#PID/status" ne donnait rien en sortie... serait-ce la cause de mon problème ?

Je précise que je le script serait lancé sur du RedHat 5.

Par avance merci
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
10 avril 2008 à 22:40
Salut,

Je verrai plutôt un truc du genre (pas testé) :
while true
do
if [ -f /proc/#PID/status ]
then
grep "VmPeak" /proc/#PID/status >> memory_max
sleep 30
continue
else
break
fi
done
J'ai remarqué que la commande "test -f /proc/#PID/status" ne donnait rien en sortie... serait-ce la cause de mon problème ?
C'est normal, la commande fait juste un test et renvoie un code retour, "0" pour vrai et "1" pour faux, qu'il faut tester pour connaitre le résultat du test. Et c'est ce que fait la boucle "while true" (aussi notée "while :" des fois), tant que c'est vrai, alors on fait un grep, puis une pause et on repart en début de boucle (continue), si c'est faux on sort de la boucle (break).

;-))
0
Bonjour jipicy,

Ca marche nickel !! Merci pour ton aide et tes explications, c'est cool :-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
11 avril 2008 à 09:26
Happy for you ;-))
0