프로세스에 대한 간단한 설명으로 스크립트를 해결하려고 합니다. Linux를 처음 사용하기 때문에 뭔가 잘못했을 수도 있습니다.
Firefox 메모리 사용량을 계산하는 memory.sh 스크립트를 만듭니다(총 메모리 대비 백분율).
1. 프로세스 및 메모리 사용량 나열(백분율로 표시)
ps -e -o pmem,args |
2. 이 목록에서 firefox라는 단어가 포함된 줄을 검색하세요.
ps -e -o pmem,args | grep -i firefox
3. 메모리 사용량을 보여주는 열만 사용하세요
ps -e -o pmem,args | grep -i firefox | grep -v grep
4. +를 추가하여 목록의 각 항목을 표시합니다.
5. 목록 끝에 0을 추가합니다.
6. 새 줄을 시작하고 종료를 추가하세요.
7. 계산하기
답변1
GNU/Linux에서는 다음을 사용하십시오 zsh
.
printf 'Total: %.3g%%\n' ${(j[+])${(f)"$(
pgrep -f firefox | LC_ALL=C xargs -r ps -o pmem=
)"}}
어디:
pgrep -f firefox
인수 목록에 포함된 프로세스의 pid를 보고합니다.firefox
xargs -r
해당 항목(있는 경우)을 인수로 전달합니다.ps
ps -o pmem=
메모리 사용량 백분율을 출력합니다( 향후 교정을 위해.
소수점 기본 문자가 포함된 영어 형식LC_ALL=C
)."$(...)"
ps
인용으로 인해 IFS 분할이 비활성화된 상태에서 출력을 캡처합니다 .${(f)...}
대신 개행 문자로 분할하세요.${(j[+])...}
결과 단어를 다음과 연결하십시오.+
$(( ... ))
결과는 산술 표현식으로 해석됩니다.printf 'Total: %.3g%%\n'
기본 3자리 정밀도로 인쇄됩니다.
pmem
이제 그 뒤에는 한 자리 숫자로만 표시된다는 점에 유의하세요 .
. 따라서 이는 자체적으로 메모리를 거의 사용하지 않는 프로세스의 경우 정확도가 매우 낮습니다. 예를 들어, 4GiB 시스템에서 100KiB 또는 2MiB를 사용하는 프로세스는 0.0%의 메모리를 사용하는 것으로 간주되고, 2MiB를 사용하는 200개의 프로세스는 400MiB를 사용하므로 10%가 되지만 위에서 계산한 합계는 0이 됩니다.
더 나은 정확성을 위해 rss
모든 프로세스의 누적을 계산하고 다음을 수행해야 합니다 hand
.
pattern=firefox
used=$((
${(j[+])${(f)"$(
pgrep -f -- "$pattern" | LC_ALL=C xargs -r ps -o rss=
)"}}
))
grep '^MemTotal:' /proc/meminfo | read x total x
printf 'Total: %.3g%%\n' 'used * 100. / total'
답변2
한 번 시도해 보세요. 형식 지침을 어느 정도 따릅니다(출력 형식 예제가 없으면 어렵습니다).추측하다정확히 무엇을 기대하셨나요?):
$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1;printf "%s+", $1}
END{printf "%s%2.1f%s\n", "0=",totmem,"%"}'
4.0+0.3+0.8+1.1+1.2+1.0+1.0+0.5+0.5+0.5+0=10.9% # example output w/o the one liner's own memory consumption
그러나 총계를 직접 생성할 수도 있습니다.
$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1}
END{print "total memory used:",totmem,"%"}'
total memory used: 10.9 % # example output
(GNU Awk 5.1.1을 사용하여 테스트됨)