Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile 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é sad.... tu peux m'aider à comprendre smile

Watael a écrit :

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 smile
Bref, prend ce que tu veux tongue


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

Sciensous #13 a écrit :

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 wink
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

AnsuzPeorth a écrit :

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 :

Watael a écrit :

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

smile
Merci à tous !  smile smile smile


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne