Isso deve fazer o que você precisa. Ele obtém as informações /proc/$PID/statm
e as imprime (de man procfs
):
size total program size
(same as VmSize in /proc/[pid]/status)
resident resident set size
(same as VmRSS in /proc/[pid]/status)
share shared pages (from shared mappings)
data data + stack
O script:
#!/usr/bin/env bash
## Print header
echo -e "Size\tResid.\tShared\tData\t%"
while [ 1 ]; do
## Get the PID of the process name given as argument 1
pidno=`pgrep $1`
## If the process is running, print the memory usage
if [ -e /proc/$pidno/statm ]; then
## Get the memory info
m=`awk '{OFS="\t";print $1,$2,$3,$6}' /proc/$pidno/statm`
## Get the memory percentage
perc=`top -bd .10 -p $pidno -n 1 | grep $pidno | gawk '{print \$10}'`
## print the results
echo -e "$m\t$perc";
## If the process is not running
else
echo "$1 is not running";
fi
done
Você pode chamar o script, dando a ele um nome de processo como entrada. Por exemplo:
$ memusage.sh firefox
Size Resid. Shared Data %
517193 261902 9546 400715 12.8
517193 261902 9546 400715 12.8
517193 261902 9546 400715 12.8
517193 262100 9546 400715 12.8
517193 262100 9546 400715 12.8
517193 262100 9546 400715 12.8
517209 261899 9546 400731 12.8
517209 261899 9546 400731 12.8
NOTAS:
- Isso pressupõe que haja apenas um único processo em execução com o nome especificado.
/proc/$PID/statm
) e depois dormir por 100ms e repetir. Por que você não pode simplesmente continuar jogando do PID associadastatm
através decat
, talvez usar algum regex para filtrar fora os valores extra / desnecessários, e apenas fazer umsleep 0.01
? Alguns sistemas operacionais não permitemsleep
valores abaixo de segundos , portanto, nesse caso, você teria que seguir a rota Python (e usar atime
biblioteca interna do Python para dormir).