#26 Le 25/05/2026, à 19:18
- RaphaelG
Re : Affichage du temps passé et barre de progression en bash.
J'ai amélioré ma barre de progression.
Avant je ne testais que le pid du process lancé en background.
Le bug possible est que le process se termine mais que le système réalloue le pid à un autre process. Le danger serait d'autant plus grand que la fréquence de test de la présence du pid est basse.
Maintenant je teste le pid plus le nom de la tâche qui tourne en background.
J'ai essayé de la faire avec "ps h -p $pid -o cmd" mais j'ai pas réussi. Je me suis rabattu sur "-o comm".
barredeprogression$ cat launcher-progress-bar3.sh
#!/bin/sh
period=5 # to personalize according the context
echo start
### It's here where you lauch your job ###
./long-job.sh 30 & ### In this example, the job is totally quiet
### If the job is verbose you must redirect stdout and stderr in a log file
### to protect the progress bar.
Pid1=$! # The process id of the long job
Cmd1=`ps h -p $Pid1 -o comm`
# While the long job is running, print an '*'
while ps h -p "$Pid1" -o pid > /dev/null
do
cmd2=`ps h -p "$Pid1" -o comm`
if [ "$cmd2" = "$Cmd1" ]
then
echo -n "*"
sleep $period
else break
fi
done
# The long job is no more running
echo stop
barredeprogression$Si la tâche lancée se met à parler, évidemment ma barre de progression s'en trouve perturbée. Mais l'OP a bien précisé dans son 1er poste que stdout et stderr sont redirigés vers /dev/null.
Hors ligne
#27 Le 25/05/2026, à 20:28
- Watael

Re : Affichage du temps passé et barre de progression en bash.
J'ai essayé de la faire avec "ps h -p $pid -o cmd" mais j'ai pas réussi.
qu'est-ce qui se passe ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#28 Le 25/05/2026, à 21:11
- diesel

Re : Affichage du temps passé et barre de progression en bash.
A ma connaissance, le système linux (ou unix) ne réattribue pas les numéros de pid (ou alors après avoir fait le tour de tous les numéros possibles, c'est à dire très longtemps).
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#29 Le 25/05/2026, à 21:41
- RaphaelG
Re : Affichage du temps passé et barre de progression en bash.
@Watael
J'arrive plus à reproduire ma pseudo erreur. Je devais faire une bêtise mais je ne sais pas où.
En fait dans mon script, on peut remplacer les "-o comm" par des "-o cmd", ça marche tout autant et c'est sans doute plus rigoureux.
@diesel
Tu as sans doute raison mais on ne sait jamais, fnux a peut être des jobs qui durent très, très, très longtemps.
Hors ligne
#30 Le 25/05/2026, à 21:54
- Watael

Re : Affichage du temps passé et barre de progression en bash.
c'est plus complet. ![]()
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#31 Le 31/05/2026, à 03:32
- fnux

Re : Affichage du temps passé et barre de progression en bash.
Bonsoir @Watael, @RapahelG et @diesel
Merci de vos messages et désolé si je ne t'y ai pas répondu aussi rapidement, mais en ce moment, j'ai pas mal de soucis de santé.
D'ailleurs, pour ne rien vous cacher, suite à une série de contrôles routiniers passés cette semaine (dopler plus angioscanner et multilples analyses sanguines) je dois passer sur le billard en urgence, soit dans une semaine mardi 9 juin pour une intervention délicate sur la carotide droite et surtout très désagréable (j'ai ai déjà eu une sur la carotide gauche en 2021), mais bon tout va bien se passer. ![]()
D'ici là, j'espère pouvoir terminer mes scripts de stress avec une petite barre de progression et, nouveau problème à surmonter: y ajouter un contrôle de la température du CPU car mon outil de stress fonctionne deux fois de suite pendant 1 heure et environ 45 minutes, et vers les deux tiers de test, tous les cores du CPU fonctionnent à 100%, ce qui sur certaines machines pas assez bien refroidies arrive même à provoquer un reboot.
@Watael
J'arrive plus à reproduire ma pseudo erreur. Je devais faire une bêtise mais je ne sais pas où.
En fait dans mon script, on peut remplacer les "-o comm" par des "-o cmd", ça marche tout autant et c'est sans doute plus rigoureux.
En début de ton script, tu indiques: #!/bin/sh
Est-ce que ça ne fonctionne pas en bash (pas eu le temps d'essayer) ?
Tu as sans doute raison mais on ne sait jamais, fnux a peut être des jobs qui durent très, très, très longtemps.
En tout, près de 3 heures 30.
Voici le lanceur dans lequel j'aimerai afficher cette barre de progression et faire ce contôle de température :
#!/bin/bash
#
# File : bench-dual.sh
# Title : Starts stress1.sh then stress2.sh script files
# UpDate : May 30, 2026
# Release : 0.99
# Authors : Fnux with @Watael, @RaphaelG and @diesel from the forum ubuntu.fr
# e-mail : fnux.fl@gmail.com
# Licence : Cc-By-Sa
#
# Note:
# -----
# To use this script, place it in the folder where you have installed the
# stress1.sh and stress2.sh bash sripts files, then you must run it with the
# root priviledge since both stress1.sh and stress2.sh need it when using
# specific system actions.
#
# So start this script with the command [sudo] and if needed enter your password
# i.e. [sudo ./bench-dual.sh]
#
# Then, wait almost 3 and a half hours to get the complete results.
#
# Enjoy.
#
# ------------------------------------------------------------------------------
# Begining of the script execution.
# ------------------------------------------------------------------------------
clear
script_pid=$$
echo $script_pid
machine_type=`uname -m`
os_version=$(lsb_release -sc)
script_date=$(date -R)
script_month=${script_date:8:3}
script_day=${script_date:5:2}
script_year=${script_date:12:4}
Month=$script_month
minimum_temp="85"
maximum_temp="88"
case $Month in
'Jan')
script_month="01";;
'Feb')
script_month="02";;
'Mar')
script_month="03";;
'Apr')
script_month="04";;
'May')
script_month="05";;
'Jun')
script_month="06";;
'Jul')
script_month="07";;
'Aug')
script_month="08";;
'Sep')
script_month="09";;
'Oct')
script_month="10";;
'Nov')
script_month="11";;
'Dec')
script_month="12";;
*)
;;
esac
small_date=$script_year"-"$script_month"-"$script_day
if [ "$USER" != "root" ]
then
clear
echo ""
echo "Hello $USER,"
echo ""
echo "WARNING!"
echo "--------"
echo ""
echo "This script can't be used without the root privileges, [sudo]."
echo ""
echo "Please restart the script with the command:"
echo ""
echo " [sudo ./bench-dual.sh]"
echo ""
echo "Please retry. Goodbye."
echo ""
echo "--------------------------------------------------------------------------"
exit
else
clear
echo ""
echo "Hello,"
echo ""
echo "This script starts stress1.sh then stress2.sh"
echo ""
echo " Please, launch the command:"
echo ""
echo " [sudo ./bench-dual.sh]"
echo ""
echo "Then, this script will run up to 3 and a half hours."
echo ""
read -p "Continue [y/N] (empty input = N) ? : " RESPONSE
case $RESPONSE in
'N'|'n'|'')
echo ""; echo "Ok, see you later." ; echo "Goodbye."; exit;;
'Y'|'y')
echo ""; echo "Ok, let's start."; echo "So please be patient."; echo ""; echo "script starting date : "; date; echo ""; echo "Please wait to see the message ''I am done. Goodbye.''"; echo "" ;;
*)
echo ""; echo "Ok, see you later." ; echo "Goodbye."; exit;;
esac
fi
script_date1=$(date)
script_start=$SECONDS
#############################################################
#
# This is from where I would like to printf the progress bar.
#
#############################################################
echo ""
echo "--------------------------------------------------------------------------"
date
echo ""
################################################################################
#
# This is from where I would like to control the CPU temperature and make
# a pause if the temperature reachs the $maximum_temp defined value as long as
# the temperature is not equal to the $minimum_temp, then continue the
# execution of the main dual-bench.sh script.
#
################################################################################
echo "./stress1.sh 1&>Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt"
./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt"
echo ""
echo "--------------------------------------------------------------------------"
date
echo ""
echo "./stress2.sh 1&>Results-Bench2-for-$machine_type-on-$os_version-$small_date.txt"
./stress2.sh 1&> "Results-Bench2-for-$machine_type-on-$os_version-$small_date.txt"
################################################################################
#
# This is from where I would like to stop to control the temperature
#
################################################################################
###########################################################
#
# This is from where I would like to stop the progress bar.
#
###########################################################
echo ""
echo "--------------------------------------------------------------------------"
echo ""
script_date2=$(date)
script_stop=$SECONDS
script_hour=$(( (script_stop-script_start) / 3600))
script_minutes=$(( (script_stop-script_start) %3600 / 60))
script_seconds=$(( (script_stop-script_start) %3600 %60))
echo ""
echo "This script start time : $script_date1"
echo ""
echo "This script end time : $script_date2"
echo ""
echo "This script elapsed time: "$script_hour"h "$script_minutes"m $script_seconds""s"
echo ""
echo "I am done. Goodbye."
echo ""
if [ -f "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt" ]
then
chmod 777 "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt"
fi
if [ -f "Results-Bench2-for-$machine_type-on-$os_version-$small_date.txt" ]
then
chmod 777 "Results-Bench2-for-$machine_type-on-$os_version-$small_date.txt"
fi
echo "--------------------------------------------------------------------------"
exitMerci d'avance de toute aide apportée.
Bien cordialement.
Dernière modification par fnux (Le 31/05/2026, à 08:29)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne
#32 Le 31/05/2026, à 03:47
- Watael

Re : Affichage du temps passé et barre de progression en bash.
Est-ce que ça ne fonctionne pas en bash (pas eu le temps d'essayer) ?
ps n'est pas une commande bash, elle fonctionnerait même sous csh (beurk!).
Dernière modification par Watael (Le 31/05/2026, à 03:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#33 Le 31/05/2026, à 08:28
- fnux

Re : Affichage du temps passé et barre de progression en bash.
Bonjour Watael,
Merci de ton retrour.
Est-ce que ça ne fonctionne pas en bash (pas eu le temps d'essayer) ?
ps n'est pas une commande bash, elle fonctionnerait même sous csh (beurk!).
Alors à quoi sert la seconde ligne du script de RapahelG "#!/bin/sh" (si ce n'est de quitter bash pour passer à sh, d'où ma question )?
Par ailleurs, je ne vois absolument pas comment intégrer son script dans le mien (le dernier que j'ai posté) car il ne me semble pas complet. Rien que la première ligne "barredeprogression$ cat launcher-progress-bar3.sh" n'est pas comprise dans mon script en bash (bench-dual.sh).
Aurais-tu une idée de comment faire ?
Merci d'avance.
Dernière modification par fnux (Le 31/05/2026, à 08:44)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne
#34 Le 31/05/2026, à 10:31
- RaphaelG
Re : Affichage du temps passé et barre de progression en bash.
/bin/sh est un lien symbolique vers /bin/dash (acronyme de Debian Almquist SHell) toujours installé en plus de bash dans toutes les Debian donc a fortiori dans toutes les Ubuntu.
Pourquoi utiliser dash plutôt que bash :
- Dash se veut full compatible avec le Bourne shell du vieil Unix System V. Hors c'est sur ces vieux Unixes System V que, tout petit, je me suis initié à ce monde merveilleux qu'est le shell. Nostalgie ...
- Dash se veut compatible POSIX, en tout cas plus POSIX que ne l'est bash.
- L'empreinte mémoire de dash est moindre que celle de de bash car dash fait moins de chose que bash. Pas d'historique des commandes, pas d'array, ... .
Si tu remplaces ma 1ère ligne par "#!/bin/bash", mon script fonctionnera tout autant.
Je vais réfléchir à comment intégrer mon script dans le tien.
Mais, déjà, je remarque une grande différence avec ton 1er post.
Dans ton 1er post tu redirigeais tout (stdout et stdrerr) sur /dev/null. Hors là ce n'est pas du tout ce que tu fais en #31. Certes, stress1 et stress2 sont bien redirigés vers /dev/null mais avant et après, il y plein d'echo qui vont s'afficher sur stdout.
Hors ligne
#35 Le 31/05/2026, à 12:30
- fnux

Re : Affichage du temps passé et barre de progression en bash.
Bonjour RaphaelG,
Merci de ton retour et surtout de tes explications précises qui me font progressser.
/bin/sh est un lien symbolique vers /bin/dash (acronyme de Debian Almquist SHell) toujours installé en plus de bash dans toutes les Debian donc a fortiori dans toutes les Ubuntu.
Pourquoi utiliser dash plutôt que bash :- Dash se veut full compatible avec le Bourne shell du vieil Unix System V. Hors c'est sur ces vieux Unixes System V que, tout petit, je me suis initié à ce monde merveilleux qu'est le shell. Nostalgie ...
- Dash se veut compatible POSIX, en tout cas plus POSIX que ne l'est bash.
- L'empreinte mémoire de dash est moindre que celle de de bash car dash fait moins de chose que bash. Pas d'historique des commandes, pas d'array, ... .
Si tu remplaces ma 1ère ligne par "#!/bin/bash", mon script fonctionnera tout autant.
Je vais réfléchir à comment intégrer mon script dans le tien.
Si tu en as le temps et l'occasion, merci d'y ajouter des commentaires car vu le nombre de visites de ce thread (déjà 1.371 lors de ta réponse), je pense que çà en intéresse beaucoup.
Mais, déjà, je remarque une grande différence avec ton 1er post.
Dans ton 1er post tu redirigeais tout (stdout et stdrerr) sur /dev/null. Hors là ce n'est pas du tout ce que tu fais en #31. Certes, stress1 et stress2 sont bien redirigés vers /dev/null mais avant et après, il y plein d'echo qui vont s'afficher sur stdout.
C'est exact, mais justement pendant le temps de l'exécution des scripts (ou de n'importe quel autre commande ou programme) lancés par bench-dual.sh durant lequel j'aimerais voir la barre de progression s'animer, il me semble qu'il n'y a rien qui puisse s'afficher dans la console et donc troubler l'affichage de cette barre de progression (tous les messages sauf deux qui informent uniquement du lancement des commandes sont redirigés vers le fichier Résultats....txt, dont c'est justement le propos.), et si nécessaire je peux remplacer les commandes "echo" par des "printf" (avec les bons caractères d'échappement pour placer le curseur là où il le faut) .
Les seuls autres messages s'affichant dans la console (ou dans stderr) le sont avant, puis après le souhait de l'affichage de la barre de progression.
Pour faire des tests, je te propose de créer deux petits fichiers bash (stress1.sh et stress2.sh) dont la seule fonction est de ne rien faire (sleep) pendant trois ou quatre minutes, le temps de voir la barre de progression s'afficher.
Et dans l'idéal, le temps cumulé de l'exécution des programmes (stress1.sh et stress2.sh ou autre programme) lancés par dual-bench.sh devrait être paramétrable par une variable du genre "execution_time="n" définie en entête de ce script (dans mon cas précis, environ 3 heures 30 soit 12600).
Cela rendrait alors cet exemple utilisable par à peu près n'importe qui et ce quelque soit l'environnement et les scripts, commandes ou programmes lancés juste après l'affichage de la barre de progression.
Qu'en penses-tu ?
En tous cas, très sincèrement merci de ton intérêt à ce post et de ta participation.
Bien cordialement.
Dernière modification par fnux (Le 01/06/2026, à 01:40)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne
#36 Le 01/06/2026, à 02:01
- RaphaelG
Re : Affichage du temps passé et barre de progression en bash.
Le timer je n'y ai pas réfléchi. Ça me semble difficile à réaliser.
Pour le contrôle de température, je ne sais pas non plus comment faire et en plus je ne suis pas sûr de comprendre ce que tu veux en faire.
Tu lances stress2.sh puis au bout d'un certain temps tu l'arrêtes pour contrôler la température.
Si c'est trop chaud, tu fais quoi ? Tu arrêtes tout ou tu laisses refroidir puis tu relances stress2.sh ?
Si la température est acceptable, relances tu stress2.sh ?
Je vais me contenter d'une barre de progression dans ton script bench-dual.sh.
Là où tu lances stress1.sh c'est à dire à la ligne 131, tu as écrit ceci ;
./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt"Tu remplaces cette ligne par ça :
period=10 # period between 2 *.
# Here, 10 seconds but you can put what ever you want
./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt" & # The last & is the key to start stress1.sh in the background.
pid1=$! # The process id of stress1.sh
cmd1=$(ps h -p $pid1 -o cmd)
# I check if the pid is still running with the same command name
while ps h -p "$pid1" -o pid >/dev/null
do
cmd2=$(ps h -p "pid1" -o cmd)
if [ "$cmd2" = "$cmd1" ]
then
echo -n "*"
sleep $period
else break # If stress1.sh is finished, I get out of the while loop
fi
doneEt voilà ! Tu auras une barre de progression pendant la durée de stress1.sh. Le délai entre 2 affichages du caractère '*' dépend de la valeur de la variable delay.
Il te reste à faire la même chose pour stress2.sh.
Tu auras alors 2 barres de progression. Si tu n'en veux qu'une seule, il faudra passer par un script tiers, appelons le stress1plus2.sh qui enchaînera stress1 et stress2 et ce sera stress1plus2.sh qui sera lancé en arrière plan.
Pour les simulations de stress1 et stress2 qui ne font que dormir, tu peux t'inspirer de mon script long-job.sh du post #14.
IHTH.
Hors ligne
#37 Le 02/06/2026, à 14:28
- fnux

Re : Affichage du temps passé et barre de progression en bash.
Re bonjour RaphaelG,
Je vais me contenter d'une barre de progression dans ton script bench-dual.sh.
Là où tu lances stress1.sh c'est à dire à la ligne 131, tu as écrit ceci ;./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt"Tu remplaces cette ligne par ça :
period=10 # period between 2 *. # Here, 10 seconds but you can put what ever you want ./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt" & # The last & is the key to start stress1.sh in the background. pid1=$! # The process id of stress1.sh cmd1=$(ps h -p $pid1 -o cmd) # I check if the pid is still running with the same command name while ps h -p "$pid1" -o pid >/dev/null do cmd2=$(ps h -p "pid1" -o cmd) if [ "$cmd2" = "$cmd1" ] then echo -n "*" sleep $period else break # If stress1.sh is finished, I get out of the while loop fi doneEt voilà ! Tu auras une barre de progression pendant la durée de stress1.sh. Le délai entre 2 affichages du caractère '*' dépend de la valeur de la variable delay.
Il te reste à faire la même chose pour stress2.sh.
Tu auras alors 2 barres de progression. Si tu n'en veux qu'une seule, il faudra passer par un script tiers, appelons le stress1plus2.sh qui enchaînera stress1 et stress2 et ce sera stress1plus2.sh qui sera lancé en arrière plan.
IHTH.
Oops, ça ne fonctionne pas, (sauf si j'ai mal recopié ton code).
Voici le retour console :
69807
--------------------------------------------------------------------------
Tue Jun 2 08:00:25 EDT 2026
./bench1.sh 1&>Results-Bench1-for-aarch64-on-resolute-.txt
error: process ID list syntax error
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
--------------------------------------------------------------------------
sleep 60 to let the CPU to cool down for 1 minute.
^C
fnux@rpi-26-04-lts:~/work$ et voici le code du script complet :
#!/bin/bash
#
# File : bench-dual.sh
# Title : Starts stress1.sh then stress2.sh script files
# UpDate : June 2, 2026
# Release : 0.99b
# Authors : Fnux with @Watael, @RaphaelG and @diesel from the forum ubuntu.fr
# e-mail : fnux.fl@gmail.com
# Licence : Cc-By-Sa
#
# Note:
# -----
# To use this script, place it in the folder where you have installed the
# stress1.sh and stress2.sh bash scripts files, then you must run it with the
# root priviledge since both stress1.sh and stress2.sh need it when using
# specific system actions.
#
# So start this script with the command [sudo] and if needed enter your password
# i.e. [sudo ./bench-dual.sh]
#
# Then, wait almost 3 and a half hours to get the complete results.
#
# Enjoy.
#
# ------------------------------------------------------------------------------
# Begining of the script execution.
# ------------------------------------------------------------------------------
clear
script_pid=$$
echo $script_pid
machine_type=`uname -m`
os_version=$(lsb_release -sc)
script_date=$(date -R)
script_month=${script_date:8:3}
script_day=${script_date:5:2}
script_year=${script_date:12:4}
Month=$script_month
case $Month in
'Jan')
script_month="01";;
'Feb')
script_month="02";;
'Mar')
script_month="03";;
'Apr')
script_month="04";;
'May')
script_month="05";;
'Jun')
script_month="06";;
'Jul')
script_month="07";;
'Aug')
script_month="08";;
'Sep')
script_month="09";;
'Oct')
script_month="10";;
'Nov')
script_month="11";;
'Dec')
script_month="12";;
*)
;;
esac
small_date=$script_year"-"$script_month"-"$script_day
bench1_result_file="Results-Bench1-for-$machine_type-on-$os_version-$small_date_2.txt"
bench2_result_file="Results-Bench2-for-$machine_type-on-$os_version-$small_date_2.txt"
if [ "$USER" != "root" ]
then
clear
echo ""
echo "Hello $USER,"
echo ""
echo "WARNING!"
echo "--------"
echo ""
echo "This script can't be used without the root privileges, [sudo]."
echo ""
echo "Please restart the script with the command:"
echo ""
echo " [sudo ./bench-dual.sh]"
echo ""
echo "Please retry. Goodbye."
echo ""
echo "--------------------------------------------------------------------------"
exit
echo ""
read -p "Continue [y/N] (empty input = N) ? : " RESPONSE
case $RESPONSE in
'N'|'n'|'')
echo ""; echo "Ok, see you later." ; echo "Goodbye."; exit;;
'Y'|'y')
echo ""; echo "Ok, let's start."; echo "So please be patient."; echo ""; echo "script starting date : "; date; echo ""; echo "Please wait to see the message ''I am done. Goodbye.''"; echo "" ;;
*)
echo ""; echo "Ok, see you later." ; echo "Goodbye."; exit;;
esac
fi
script_date1=$(date)
script_start=$SECONDS
delay=10
echo ""
echo "--------------------------------------------------------------------------"
date
echo ""
echo "./bench1.sh 1&>$bench1_result_file"
./stress1.sh 1&> "Results-Bench1-for-$machine_type-on-$os_version-$small_date-2.txt" & # The last & is the key to start stress1.sh in the background.
pid1=$! # The process id of stress1.sh
cmd1=$(ps h -p $pid1 -o cmd)
# I check if the pid is still running with the same command name
while ps h -p "$pid1" -o pid >/dev/null
do
cmd2=$(ps h -p "pid1" -o cmd)
if [ "$cmd2" = "$cmd1" ]
then
echo -n "*"
sleep $delay
else break # If stress1.sh is finished, I get out of the while loop
fi
done
echo ""
echo "--------------------------------------------------------------------------"
echo ""
echo "sleep 60 to let the CPU to cool down for 1 minute."
sleep 60 # this is to let the CPU to cool down for 1 minute.
echo ""
echo "--------------------------------------------------------------------------"
date
echo ""
echo "./bench2.sh 1&>$bench_result_file"
./stress2.sh 1&> "Results-Bench2-for-$machine_type-on-$os_version-$small_date-2.txt" & # The last & is the key to start stress1.sh in the background.
pid1=$! # The process id of stress2.sh
# I check if the pid is still running with the same command name
cmd1=$(ps h -p $pid1 -o cmd)
while ps h -p "$pid1" -o pid >/dev/null
do
cmd4=$(ps h -p "pid1" -o cmd)
if [ "$cmd2" = "$cmd1" ]
then
echo -n "*"
sleep $delay
else break # If stress2.sh is finished, I get out of the while loop
fi
done
echo ""
echo ""
echo "--------------------------------------------------------------------------"
echo ""
script_date2=$(date)
script_stop=$SECONDS
script_hour=$(( (script_stop-script_start) / 3600))
script_minutes=$(( (script_stop-script_start) %3600 / 60))
script_seconds=$(( (script_stop-script_start) %3600 %60))
echo ""
echo "This script start time : $script_date1"
echo ""
echo "This script end time : $script_date2"
echo ""
echo "This script elapsed time: "$script_hour"h "$script_minutes"m $script_seconds""s"
echo ""
echo "I am done. Goodbye."
echo ""
if [ -f "Results-Bench-Nginx-for-$machine_type-on-$os_version-$small_date.txt" ]
then
chmod 777 "Results-Bench-Nginx-for-$machine_type-on-$os_version-$small_date.txt"
fi
if [ -f "Results-Bench-Apache2-for-$machine_type-on-$os_version-$small_date.txt" ]
then
chmod 777 "Results-Bench-Apache2-for-$machine_type-on-$os_version-$small_date.txt"
fi
echo "--------------------------------------------------------------------------"
exitSTP, peux-tu voir où est le problème et me corriger ?
Merci d'avance.
Cheers.
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne
#38 Le 02/06/2026, à 15:00
- Watael

Re : Affichage du temps passé et barre de progression en bash.
/chemin/absolu/stress1.sh &> "/chemin/absolu/Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt" &le premier & redirige et la stdout et la stderr vers Results...*
le second & met le processus en arrière-plan.
--
* si tu ne veux que l'un ou l'autre, ce sera ou
/chemin/absolu/stress1.sh 1>/chem/abs/Results &pour la stdout
ou
/chemin/absolu/stress1.sh 2>/chem/abs/Results &pour la stderr
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#39 Le 02/06/2026, à 15:46
- fnux

Re : Affichage du temps passé et barre de progression en bash.
Bonjour Watael,
Merci de ton intervention, mais je ne comprends pas. ![]()
error: process ID list syntax error
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).En effet, je récupère bien ce que j'attends dans le fichier "Results-Bench1-for-$machine_type-on-$os_version-$small_date.txt" mais vu le renvoi dans la console, il me semble que l'erreur concerne l'ajout du code de RapahelG en regard de l'emploi de la commande "ps" et pas de la redirection ni de stdout, ni de stderr.
Idem pour le lancement de stress2.sh
error: process ID list syntax error
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).Qu'en penses-tu ?
Cheers.
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne
#40 Le 02/06/2026, à 16:06
- Watael

Re : Affichage du temps passé et barre de progression en bash.
tu as relancé le script avec les corrections proposées ?
error: process ID list syntax error
il ya manifestement un problème avec le PID passé à ps
pour voir lequel, fais un echo de la variable qui le contient, et fait un exit immédiatement après : ce n'est pas la peine de prolonger le script.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#41 Le 02/06/2026, à 21:02
- RaphaelG
Re : Affichage du temps passé et barre de progression en bash.
En #23, Watael a donné une syntaxe pour renvoyer stdout et stderr dans un fichier log. J'avais un peu tiqué car, d'habitude, je ne fais pas comme cela mais comme cela venait de Watael, je n'ai pas osé faire de remarque.
En #31, je re-tique dans ta manière de lancer stress1 mais stress2 mais je pense que tu as du suivre les conseils de Watael en #23 donc je reprends la même syntaxe dans mon #36. En fait, je n'avais pas bien regardé. En #31 (et donc en #36 et #37) tu as rajouté un 1 devant le 1er '&'. Ce qui, à mon avis ne marche pas.
Donc pour lancer stress1 (ou 2), il faut faire :
soit comme Watael te l'a déjà dit :
./stress1.sh &> "Results-Bench1-for-$machine_type-on-$os_version-$small_date-2.txt" &soit comme moi j'ai l'habitude de procéder :
./stress1.sh > "Results-Bench1-for-$machine_type-on-$os_version-$small_date-2.txt" 2>&1 &Je ne crois pas que les chemins relatif ou absolu ont une influence même si dans les bonnes pratiques du shell, il faut privilégier les chemins absolus.
Hors ligne
#42 Le 02/06/2026, à 21:26
- Watael

Re : Affichage du temps passé et barre de progression en bash.
dans les bonnes pratiques du shell, il faut privilégier les chemins absolus
c'est exactement ce que je n'ai fait que suggérer. ![]()
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#43 Le 04/06/2026, à 22:21
- fnux

Re : Affichage du temps passé et barre de progression en bash.
@RapahelG et @ Watael
Désolé de ne pas répondre aussi vite que je le voudrais, mais en ce moment je suis overbooké par de multiples analyses à faire avant mon hospitalisation ce lundi 8 juin.
En #23, Watael a donné une syntaxe pour renvoyer stdout et stderr dans un fichier log. J'avais un peu tiqué car, d'habitude, je ne fais pas comme cela mais comme cela venait de Watael, je n'ai pas osé faire de remarque.
En #31, je re-tique dans ta manière de lancer stress1 mais stress2 mais je pense que tu as du suivre les conseils de Watael en #23 donc je reprends la même syntaxe dans mon #36. En fait, je n'avais pas bien regardé. En #31 (et donc en #36 et #37) tu as rajouté un 1 devant le 1er '&'. Ce qui, à mon avis ne marche pas.Donc pour lancer stress1 (ou 2), il faut faire :
soit comme Watael te l'a déjà dit :
./stress1.sh &> "Results-Bench1-for-$machine_type-on-$os_version-$small_date-2.txt" &soit comme moi j'ai l'habitude de procéder :
./stress1.sh > "Results-Bench1-for-$machine_type-on-$os_version-$small_date-2.txt" 2>&1 &
Encore une fois, merci à vous deux pour votre aide.
Et si je mettais mes lunettes, celà m'éviterais de faire des fautes de frappe ![]()
Maintenant, mon script affiche bien une barre de progression avec des "*" ![]()
Je vais voir comment l'améliorer un peu en affichant aussi une barre pleine de "-" à surcharger par les "*" et aussi, si possible, un timer soit avant cette barre de progression, soit sur la ligne au dessus.
Pour le contrôle de la température, c'est un autre sujet sur lequel je travaillerai la semaine prochaine lors de mon séjour à l'hôpital.
Encore merci de votre participation particulièrement efficace et instructive.
Je mettrais [résolu] dans le titre une fois mes benchmarks terminés et le code complet publié dans ce thread.
Cheers.
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
Hors ligne