top
に基づく関数を使用する場合があります 効用。ただし、CPU 使用率はいつでも (急速に) 変化する可能性があるため、これはあまり信頼できないことに注意してください。つまり、チェックが成功したからといって、次のコードが実行される限り CPU 使用率が低いままであるとは限りません。警告されました。
機能:
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
bc -l
を使用していることに注意してください top は CPU 使用率を 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
}
sysstat パッケージをインストールする必要があることに注意してください。
mpstat
を呼び出すだけのはるかに効率的なバージョン そして awk
それぞれ1回ずつ、完了するまで両方を実行し続けます。明示的に sleep
する必要はありません 両方のプロセスを毎秒再起動します (組み込みプラットフォームでは、測定可能なオーバーヘッドになる可能性があります):
wait_until_cpu_low() {
awk -v target="$1" '
$13 ~ /^[0-9.]+$/ {
current = 100 - $13
if(current <= target) { exit(0); }
}' < <(LC_ALL=C mpstat 1)
}
$13
を使用しています idle %
がここだから 私のバージョンの mpstat 用です。異なる場合は適切に置き換えてください。
これには、シェルネイティブの計算のために整数に丸める必要がなく、浮動小数点計算を正しく行うという特別な利点があります。