Boucle while et fonction test
Résolu
Toff
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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:
- Boucle while et fonction test
- Test performance pc - Guide
- Fonction si et - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test steam deck oled - Guide
- Test composant pc - Guide
2 réponses
Salut,
Je verrai plutôt un truc du genre (pas testé) :
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).
;-))
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 doneJ'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).
;-))
Ca marche nickel !! Merci pour ton aide et tes explications, c'est cool :-)