#1 Le 14/09/2012, à 21:42
- général03
Extraire la CPU d'une commande top
Bonjour,
j'aimerais récupérer la somme totale de CPU utilisée lors de la saisie de la commande top. Quelqu'un aurait des pistes si jamais cela est possible directement en ligne de commande.
Merci
Hors ligne
#2 Le 14/09/2012, à 22:20
- Haleth
Re : Extraire la CPU d'une commande top
Beuh
Un truc alarache, comme ca ?
#!/bin/bash
top -n 1 | tail -$(( $LINES - 7 )) | awk '{print $10}' | while read line
do
echo "$sum + $line"
sum=$(( $sum + $line ))
echo $sum
done | tail -1
Tu devrais regarder du coté du procfs, y'a surement ce genre d'info plus facilement
Dernière modification par Haleth (Le 14/09/2012, à 22:31)
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#3 Le 14/09/2012, à 22:28
- général03
Re : Extraire la CPU d'une commande top
oua ben toi t'es efficace :-)
Tu peux m'expliquer un peu comme fonctionne ton code, stp ?
Il me semble que ton code se base sur le fait que le % de cpu est toujours dans la même colonne ( avec l'option "o" de top tu peux la changer de place).
Je cherche du code dynamique et générique
Merci
Hors ligne
#4 Le 14/09/2012, à 22:34
- Haleth
Re : Extraire la CPU d'une commande top
Ok
Quand t'affiche top, sans toucher à rien, la colonne CPU est la 10eme
Je prend un instant du top, je vire les 7 premières lignes (je prend donc les 24 - 7 dernières lignes, en fonction de la configuration de ton terminal)
J'extrait la 10eme colonne, puis je boucle pour faire la somme
J'voit pas vraiment ce que t'appelle "dynamique" sur ce genre de probleme
Quant à la généricité, j'imagine qu'elle est la Ca doit fonctionner partout, je pense
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#5 Le 14/09/2012, à 22:41
- général03
Re : Extraire la CPU d'une commande top
Merci beaucoup.
En faite si on pourrait extraire que la colonne CPU du top là ça serait dynamique (pas besoin de savoir où est placé la colonne). J'ai pas vu cette option dans top, elle existe ?
Hors ligne
#6 Le 14/09/2012, à 22:52
- Haleth
Re : Extraire la CPU d'une commande top
Ok
La colonne, dans top, c'est toujours la 10eme
Bref, j'ai trouvé mieux, je pense:
#!/bin/bash
sum=0
ps -eo pcpu | egrep -v "0.0|CPU" | while read line
do
sum=`echo "$sum + $line" | bc`
echo $sum
done | tail -1
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#7 Le 15/09/2012, à 11:01
- Watael
Re : Extraire la CPU d'une commande top
salut,
on va faire ça proprement, hein.
en bash
while read v; do [ "$v" != "0.0" ] && s=$(bc -l <<<"${s:-0} + $v"); done < <(ps h -eo pcpu); echo $s
en bash + awk
awk '{s+=$0}END{print s}' < <(ps h -eo pcpu)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#8 Le 17/09/2012, à 19:43
- général03
Re : Extraire la CPU d'une commande top
Désolé pour le retard.
J'arrivais a peu près à lire le code de Haleth mais là Watael tu m'as pommé .... tu peux m'aider à comprendre
on va faire ça proprement, hein.
Pourquoi la méthode de Haleth ne l'est pas ?
Merci
Hors ligne
#9 Le 17/09/2012, à 19:45
- Haleth
Re : Extraire la CPU d'une commande top
while read v; do [ "$v" != "0.0" ] && s=$(bc -l <<<"${s:-0} + $v"); done < <(ps h -eo pcpu); echo $s
C'est (en gros), le meme code, mais sur une ligne
Il indente pas, et fait le traitement dans la condition de la boucle
J'me demande si c'est plus performant, parcque c'est clairement plus moche
Bref, prend ce que tu veux
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#10 Le 17/09/2012, à 19:53
- général03
Re : Extraire la CPU d'une commande top
L'option pcpu de ps correspond à quoi ?
Hors ligne
#11 Le 17/09/2012, à 19:57
- Haleth
Re : Extraire la CPU d'une commande top
c'est le format des sorties
24% [alex:~]ps
PID TTY TIME CMD
13013 pts/4 00:00:00 bash
13189 pts/4 00:00:00 ps
24% [alex:~]ps eo pcpu
%CPU
0.0
0.0
108
0.0
2.3
1.1
0.0
La premiere commande renvoye les colonnes par défault, la deuxieme renvoye que ce que tu veux
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#12 Le 17/09/2012, à 21:00
- Watael
Re : Extraire la CPU d'une commande top
<(ps h -eo pcpu) #redirige la sortie de ps vers un descripteur de fichier (en général le 63)
< #redirige le descripteur de fichier vers read !
[ "$v" != "0.0" ] #teste si la ligne lue est différente de 0.0
echo "$s" #:)
le code de Haleth comporte trop de commandes externes, et utilise tail parce qu'il est obligé d'afficher le résultat de chaque addition dans la boucle, car la partie droite du pipe, qui calcule la somme, est exécuté dans un sous-interpréteur, en dehors duquel la variable contenant la somme n'existe pas.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 18/09/2012, à 07:41
- Sciensous
Re : Extraire la CPU d'une commande top
et le -0 de
${s:-0}
, que fait-il ?
merci
Edit: je crois avoir trouvé, il prend les x dernier carateres à partir de la fin, mais alors pourquoi 0 ?
est-ce lié au fait que dans les calculs, les résultats inférieurs à 1 sont .314 au lieu de 0.314 ?
Dernière modification par Sciensous (Le 18/09/2012, à 07:49)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#14 Le 18/09/2012, à 08:06
- pingouinux
Re : Extraire la CPU d'une commande top
et le -0 de
${s:-0}
, que fait-il ?
Si s est indéfini ou nul, renvoie 0
Sinon, renvoie $s
Voir man bash, rubrique Expansion des Paramètres (Parameter Expansion)
Hors ligne
#15 Le 20/09/2012, à 08:25
- général03
Re : Extraire la CPU d'une commande top
Super merci les gars
Je remarque que parfois j'ai un pourcentage supérieur à 100, cela est due à quoi ? Un top confirme qu'un processus prend plus de 100% de CPU
Merci
Hors ligne
#16 Le 20/09/2012, à 09:36
- Haleth
Re : Extraire la CPU d'une commande top
Rapport au multiproc
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#17 Le 24/09/2012, à 18:59
- général03
Re : Extraire la CPU d'une commande top
Je viens de comparer les 2 commandes top et ps h -eo pcpu, et j'obtiens 2 valeurs totalement différentes au niveau du % de CPU .....
Dernière modification par général03 (Le 24/09/2012, à 18:59)
Hors ligne
#18 Le 24/09/2012, à 22:50
- AnsuzPeorth
Re : Extraire la CPU d'une commande top
Bjr,
Pour le fun ... Pas besoin de top ou autre. (on pourrait faire une fonction pour limiter la répétition de code, mais bon, c'est pour l'exemple.)
tot1=$(grep '^cpu ' /proc/stat | cut -d ' ' -f3,4,5) && sleep 1 && tot2=$(grep '^cpu ' /proc/stat | cut -d ' ' -f3,4,5) && echo "scale=2; ( (${tot2// /+}) - (${tot1// /+}) ) / $(grep -c '^processor' /proc/cpuinfo)" | bc
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#19 Le 25/09/2012, à 08:06
- général03
Re : Extraire la CPU d'une commande top
Mais pourquoi je n'obtiens pas la même chose. Je comprendrais si c'était quelques % mais j'ai souvent 20 à 30 % de différence ??
Merci AnsuzPeorth mais encore une commande de plus .... je choisi quoi moi ....
Hors ligne
#20 Le 25/09/2012, à 10:17
- AnsuzPeorth
Re : Extraire la CPU d'une commande top
Ben compare avec le moniteur systeme, tu verras qui se rapproche de la vérité ...
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#21 Le 25/09/2012, à 10:27
- général03
Re : Extraire la CPU d'une commande top
Ben compare avec le moniteur systeme, tu verras qui se rapproche de la vérité ...
Ben c'est un serveur sans environnement graphique ....
Hors ligne
#22 Le 22/03/2018, à 04:56
- moko138
Re : Extraire la CPU d'une commande top
Cinq ans et demi plus tard, bonnes gens, votre fil reste passionnant ! Même si je suis loin de tout comprendre.
Il y a longtemps que je voulais obtenir le total des %CPU des processus de chrom* et que j'étais bloqué à la colonne sans son total.
Exemple (n'utilisant pas chromium et encore moins google-chrome, j'ai remplacé chrom* par leafpad) :
moko@pc:~$ ps fauxwww | grep leafpad | tr -s " " | cut -d" " -s -f4 | sort
0.2
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.3
0.4
0.4
0.4
moko@pc:~$
Alors, dans le commande de Watael :
en bash
while read v; do [ "$v" != "0.0" ] && s=$(bc -l <<<"${s:-0} + $v"); done < <(ps h -eo pcpu); echo $s
on remplace
(ps h -eo pcpu)
par
(ps fauxwww | grep leafpad | tr -s " " | cut -d" " -s -f4)
et on touche au but.
/!\ Il faut encore mettre "s" à zéro au début :
s=0 ;
sans quoi, la répétition de la commande ajoute au bon résultat le résultat précédent.
Moyennant quoi mon but est atteint !
echo " Pourcentage total de RAM consommée par leS processuS leafpad :"; s=0 && while read v; do [ "$v" != "0.0" ] && s=$(bc -l <<<"${s:-0} + $v"); done < <(ps fauxwww | grep leafpad | tr -s " " | cut -d" " -s -f4); echo $s
Pourcentage total de RAM consommée par leS processuS leafpad :
5.9
et pour chrome/chromium-browser, la commande sera donc :
echo " Pourcentage total de RAM consommée par leS processuS de chrome et de chromium-browser :"; s=0 && while read v; do [ "$v" != "0.0" ] && s=$(bc -l <<<"${s:-0} + $v"); done < <(ps fauxwww | grep -E "chrome|chromium-br" | tr -s " " | cut -d" " -s -f4); echo $s
Pourcentage total de RAM consommée par leS processuS de chrome et de chromium-browser :
0
Merci à tous !
%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel : À la découverte de dcraw
Hors ligne