필요한 작업을 수행해야합니다. 정보를 가져오고 /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 의 첫 정수를 볼 수 있음 ) 100ms 동안 자고 반복해야합니다. 를statm
통해 PID를 계속 던질 수없는 이유는 무엇입니까?cat
일부 정규식을 사용하여 여분의 / 필요없는 값을 필터링하고 그냥sleep 0.01
? 일부 운영 체제는 1 초 미만의sleep
값을 허용하지 않으므로이 경우 Python 경로를 가져와야합니다 (time
대신 Python의 내장 라이브러리를 사용하여 잠자기).