web-dev-qa-db-fra.com

Afficher l'utilisation du processeur à l'aide d'une commande

Je veux voir l'utilisation du processeur.
J'ai utilisé cette commande:

top -bn1 | grep "Cpu(s)" | 
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | 
           awk '{print 100 - $1}'

Mais ça retourne à 100%.
Quelle est la bonne façon?

18

Pour obtenir l’utilisation du processeur, le meilleur moyen est de lire le fichier/proc/stat. Voir man 5 proc pour plus d'aide.

Il y a un script utile écrit par Paul Colby que j'ai trouvé ici

#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)

PREV_TOTAL=0
PREV_IDLE=0

while true; do

  CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
  unset CPU[0]                          # Discard the "cpu" prefix.
  IDLE=${CPU[4]}                        # Get the idle CPU time.

  # Calculate the total CPU time.
  TOTAL=0

  for VALUE in "${CPU[@]:0:4}"; do
    let "TOTAL=$TOTAL+$VALUE"
  done

  # Calculate the CPU usage since we last checked.
  let "DIFF_IDLE=$IDLE-$PREV_IDLE"
  let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
  let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
  echo -en "\rCPU: $DIFF_USAGE%  \b\b"

  # Remember the total and idle CPU times for the next check.
  PREV_TOTAL="$TOTAL"
  PREV_IDLE="$IDLE"

  # Wait before checking again.
  sleep 1
done

enregistrez-le dans cpu_usage, ajoutez la permission d'exécution chmod +x cpu_usage et exécutez:

./cpu_usage

pour arrêter le script, appuyez sur Ctrl+c

15
girardengo

Pourquoi ne pas utiliser htop [visualiseur de processus interactif]? Pour l'installer, ouvrez une fenêtre de terminal et tapez:

Sudo apt-get install htop

Voir également man htop pour plus d'informations et pour le configurer.

enter image description hereenter image description here

36
v2r

J'ai trouvé une solution qui fonctionne bien, la voici:

top -bn2 | grep '%Cpu' | tail -1 | grep -P  '(....|...) id,' 

Je ne suis pas sûr, mais il me semble que la première itération de top avec le paramètre -n renvoie des données factices, toujours les mêmes dans tous mes tests.

Si j'utilise -n2, la seconde image est toujours dynamique. La séquence est donc:

  1. Obtenez les 2 premières images de top: top -bn2
  2. Ensuite, à partir de ces cadres, ne prenez que les lignes contenant '% Cpu': grep '%Cpu'
  3. Alors, ne prenez que la dernière occurrence/ligne: `tail -1``
  4. Ensuite, obtenez la valeur inactive (4 ou 5 caractères, un espace, "id"): grep -P '(....|...) id,'

J'espère que ça aide, Paul

enter image description here

6
Paul