Você pode usar top
no modo em lote e uma única iteração:
top -bn 1
Eu também usaria free
em vez de analisar meminfo
.
Outra maneira é usar ps
, adicionar a% de CPU de cada processo e dividir pelo número de núcleos que sua máquina possui:
ps axo pcpu |
gawk -v cores='grep -m 1 cores /proc/cpuinfo | cut -d ' ' -f 3' \
-v cpus='grep -c processor /proc/cpuinfo' \
'{k+=$1}END{print k/(cores * cpus);}'
Se o seu sistema tiver apenas um núcleo, o script acima falhará, produzindo:
gawk: cmd. line:1: (FILENAME=- FNR=83) fatal: division by zero attempted
Para que seja possível, altere k/(cores * cpus)
para k/(cores==""?1:cores * cpus)
. Isso verificará se a variável cores
não está vazia, se for, 1
será usado no lugar.