1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#!/bin/bash
# TODO: finish it
# /proc/stat format:
# cpu[n] user nice system idle iowait irq softirq steal guest guest_nice
# format user nice system idle steal total
# total = user + nice + system + idle + steal
prevstat=$(awk '
/^cpu[0-9]+/ {print $2, $3, $4, $5, $9, ($2 + $3 + $4 + $5 + $9)}' /proc/stat)
sleep 0.5
stat=$(awk '
/^cpu[0-9]+/ {print $2, $3, $4, $5, $9, ($2 + $3 + $4 + $5 + $9)}' /proc/stat)
num_cpu=$(echo "$stat" | wc -l)
get_load() {
line=${1:-1}
last=$(echo "$stat" | sed "${line}q;d")
prev=$(echo "$prevstat" | sed "${line}q;d")
read -r u n s last_idle st last_total <<< "$last"
#echo "$u $n $s $last_idle $st $last_total"
read -r u n s prev_idle st prev_total <<< "$prev"
#echo "$u $n $s $prev_idle $st $prev_total"
diff=$(echo "$last_total $prev_total" | awk '{printf "%d", $1 - $2}')
[ "$diff" = "0" ] && return
percentage=$(echo "$diff $last_idle $prev_idle" | awk '{printf "%.2f", 100.0 * (($1 - ($2 - $3)) / $1)}')
echo -e "$percentage"
}
total_load=0
for i in $(seq 1 "$num_cpu"); do
load=$(get_load "$i")
total_load=$(echo "$total_load $load" | awk '{printf "%.2f", $1 + $2}')
done
total_percentage=$(echo "$total_load $num_cpu" | awk '{printf "%.2f", ($1 / $2) + 0.5}')
echo -e "$total_percentage"
#read -r cpu a b c previdle rest < /proc/stat
#prevtotal=$((a+b+c+previdle))
#sleep 0.5
#read -r cpu a b c idle rest < /proc/stat
#total=$((a+b+c+idle))
#cpu=$((100*( (total-prevtotal) - (idle-previdle) ) / (total-prevtotal) ))
#echo -e "$cpu"
exit 0
|