Điều này sẽ làm những gì bạn cần. Nó nhận thông tin từ /proc/$PID/statm
và in (từ 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
Kịch bản:
#!/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
Sau đó, bạn có thể gọi tập lệnh, đặt tên cho quy trình làm đầu vào. Ví dụ:
$ 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
GHI CHÚ:
- Điều này giả định rằng chỉ có một quy trình chạy duy nhất với tên được chỉ định.
/proc/$PID/statm
), sau đó ngủ trong 100ms và lặp lại. Tại sao không thể bạn chỉ cần giữ ném của PID liên quanstatm
thông quacat
, có thể sử dụng một số regex để lọc ra khỏi tắm / giá trị không cần thiết, và chỉ cần làm mộtsleep 0.01
? Một số hệ điều hành sẽ không cho phép cácsleep
giá trị phụ thứ hai , vì vậy, trong trường hợp đó, bạn phải đi theo tuyến Python (và sử dụngtime
thư viện tích hợp của Python để ngủ).