#!/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"