GNU/Linux >> Linux Esercitazione >  >> Linux

Bash:attendere fino a quando l'utilizzo della CPU scende al di sotto di una soglia

Potresti usare una funzione basata su top utilità. Ma nota che ciò non è molto affidabile perché l'utilizzo della CPU potrebbe - rapidamente - cambiare in qualsiasi momento. Ciò significa che solo perché il controllo ha avuto esito positivo, non è garantito che l'utilizzo della CPU rimanga basso finché viene eseguito il codice seguente. Sei stato avvisato.

La funzione:

function wait_for_cpu_usage {
    threshold=$1
    while true ; do
        # Get the current CPU usage
        usage=$(top -n1 | awk 'NR==3{print $2}' | tr ',' '.')

        # Compared the current usage against the threshold
        result=$(bc -l <<< "$usage <= $threshold")
        [ $result == "1" ] && break

        # Feel free to sleep less than a second. (with GNU sleep)
        sleep 1
    done
    return 0
}

# Example call
wait_for_cpu_usage 25

Nota che sto usando bc -l per il confronto since top stampa l'utilizzo della CPU come valore float.


wait_for_cpu_usage()
{
    current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
    while [[ "$current" -ge "$1" ]]; do
        current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
        sleep 1
    done
}

Si noti che richiede l'installazione del pacchetto sysstat.


Una versione molto più efficiente chiama semplicemente mpstat e awk una volta ciascuno, e li fa funzionare entrambi fino al termine; non c'è bisogno di sleep esplicitamente e riavviare entrambi i processi ogni secondo (che, su una piattaforma integrata, potrebbe sommarsi a un sovraccarico misurabile):

wait_until_cpu_low() {
    awk -v target="$1" '
    $13 ~ /^[0-9.]+$/ {
      current = 100 - $13
      if(current <= target) { exit(0); }
    }' < <(LC_ALL=C mpstat 1)
}

Sto usando $13 qui perché è lì che idle % è per la mia versione di mpstat; sostituisci in modo appropriato se il tuo è diverso.

Questo ha l'ulteriore vantaggio di eseguire correttamente la matematica in virgola mobile, piuttosto che dover arrotondare a numeri interi per la matematica nativa della shell.


Linux
  1. Come limitare l'utilizzo della CPU di un processo in Linux

  2. Ottieni l'utilizzo della CPU nello script della shell?

  3. Bash:loop fino a quando lo stato di uscita del comando è uguale a 0

  4. Calcolo accurato dell'utilizzo della CPU dato in percentuale in Linux?

  5. ps e top danno un diverso utilizzo della CPU

Bash fino a Loop

Come visualizzare l'utilizzo della CPU dalla riga di comando

Come ottenere l'utilizzo della CPU di un singolo processo in Linux

Controlla l'utilizzo di RAM e CPU da parte di Kodi in tempo reale

Elenco dettagliato dell'utilizzo delle risorse

Come controllare l'utilizzo o l'utilizzo della CPU di Linux