![/usr/bin/time을 통해 최대 메모리 사용량을 얻는 방법은 무엇입니까?](https://linux55.com/image/192252/%2Fusr%2Fbin%2Ftime%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EC%B5%9C%EB%8C%80%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%82%AC%EC%9A%A9%EB%9F%89%EC%9D%84%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음 명령을 사용하는 예제 와 같이 usr/bin/time
스크립트의 RAM 사용량을 모니터링하고 지정된 제한을 초과하는지 확인할 수 있도록 변수에 저장하는 프로그램을 사용하여 스크립트를 작성하고 있습니다 .$mlimit
ls /
$mlimit=512000 #512mb limit in kilobytes
$musage=$(/usr/bin/time -f "%M" ls / | rev | cut -f 1 | rev)
echo "RAM usage: $musage"
/usr/bin/time
이 경우 명령의 출력이 먼저 반환되고 그 다음에 최대 상주 세트 크기(RAM 사용량)가 반환됩니다. 그런 다음 출력을 반전하고 잘라서 메모리 사용량을 얻은 다음 다시 반전시킬 수 있을 것 같습니다. 하지만 나는 다음과 같은 결과를 얻었습니다: RAM usage: bin
. bin
는 명령에 의해 반환된 첫 번째 디렉터리입니다 ls /
. 그래서 RAM 사용량을 확보하려는 나의 전략은 효과가 없습니다.
감사해요
답변1
GNU는 time
stderr에 자원 사용 정보를 인쇄하지만 다른 곳에 쓰도록 지시할 수 있습니다.-o
{
musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1
ls
변수의 최대 메모리 사용량은 "stdout" 및 "stderr"을 유지하면서 기록됩니다 .
작동 방식은 명령 대체 외부에서 원래 fd 1(stdout)이 fd 3에 복사되어 명령 대체 내부에서 3>&1
fd 4에서 사용할 수 있게 된 후 명령 대체 파이프를 사용하여 ls
원래 stdout을 복원할 수 있다는 것입니다.>&3
그런 다음 time
출력을 해당 파이프에 기록하면 /dev/fd/4
stdout ls
이 원시 출력이 됩니다.