27 lines
1.1 KiB
Bash
Executable File
27 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# CPU: общий процент + по ядру на каждое ядро (Linux). Mac: только общий.
|
|
# Контракт мониторов: первые N строк (monitor.percentages, max 8) — проценты,
|
|
# дальше — key=value.
|
|
case "$(uname)" in
|
|
Darwin) cores=$(sysctl -n hw.ncpu) ;;
|
|
*) cores=$(nproc) ;;
|
|
esac
|
|
overall=$(ps -A -o %cpu | awk -v c="$cores" '{s+=$1} END {printf "%d", s/c}')
|
|
echo "$overall"
|
|
# per-core: два среза /proc/stat (user..steal), usage = 1 - Δidle/Δtotal
|
|
if [ -r /proc/stat ]; then
|
|
a=$(grep '^cpu[0-9]* ' /proc/stat | awk '{i=$5+$6; t=0; for(n=2;n<=8;n++) t+=$n; print i, t}')
|
|
sleep 0.5
|
|
# оба среза одним awk: первая половина строк — срез 1, вторая — срез 2
|
|
printf '%s\n%s\n' "$a" "$(grep '^cpu[0-9]* ' /proc/stat | awk '{i=$5+$6; t=0; for(n=2;n<=8;n++) t+=$n; print i, t}')" | awk '
|
|
{ ia[NR]=$1; ta[NR]=$2; n=NR }
|
|
END {
|
|
half=n/2
|
|
for (r=1; r<=half; r++) {
|
|
di=ia[r+half]-ia[r]; dt=ta[r+half]-ta[r]
|
|
printf "%d\n", (dt>0 ? (1-di/dt)*100 : 0)
|
|
}
|
|
}'
|
|
fi
|
|
echo "ядер=$cores"
|