Це має робити те, що потрібно. Він отримує інформацію від /proc/$PID/statm
та друкує (з 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
Сценарій:
#!/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
Потім ви можете зателефонувати скрипту, давши йому ім'я процесу як вхід. Наприклад:
$ 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
ПРИМІТКИ:
- Це передбачає, що існує лише один запущений процес із вказаною назвою.
/proc/$PID/statm
), а потім спати протягом 100 мс і повторити. Чому ви не можете просто продовжувати кидати ПІД - асоційованийstatm
черезcat
, можливо , використовувати деякий регулярний вираз для фільтра від додаткових / непотрібних значень, і просто зробитиsleep 0.01
? Деякі операційні системи не дозволятьsleep
значень другої секунди , тому в цьому випадку вам доведеться пройти маршрут Python (іtime
замість цього використати вбудовану бібліотеку Python ).