Bu ihtiyacınız olanı yapmalı. Bilgileri alır /proc/$PID/statm
ve yazdırır 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
Senaryo:
#!/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
Daha sonra komut dosyasını girdi olarak bir işlem adı vererek çağırabilirsiniz. Örneğin:
$ 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
NOTLAR:
- Bu, belirtilen adla yalnızca tek bir çalışan işlem olduğunu varsayar .
/proc/$PID/statm
) ve sonra 100 ms uyku ve tekrarlayın. Neden sadece PID en ilişkili atma devam edemezstatm
yoluylacat
, belki ekstra / gereksiz değerlere kapalı filtreye bazı normal ifadeler kullanabilirsiniz ve sadece bunusleep 0.01
? Bazı işletim sistemleri ikinci saniyeden daha düşüksleep
değerlere izin vermez , bu durumda Python yolunu kullanmanız gerekir (vetime
bunun yerine uyumak için Python'un yerleşik kitaplığını kullanmanız gerekir).