![/usr/bin/time으로 메모리 최고 사용량만 얻는 방법은 무엇입니까?](https://rvso.com/image/192252/%2Fusr%2Fbin%2Ftime%EC%9C%BC%EB%A1%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%B5%9C%EA%B3%A0%20%EC%82%AC%EC%9A%A9%EB%9F%89%EB%A7%8C%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)
스크립트의 RAM 사용량을 모니터링하는 프로그램 으로 스크립트를 작성 usr/bin/time
하고 이를 변수에 저장하여 지정된 제한보다 높은지 확인할 수 있습니다. $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에 복제하여 작동하므로 명령 대체 내에서 fd 4에서 명령 대체 파이프를 사용할 수 있게 만든 후 with 3>&1
에 대한 원래 stdout을 복원할 수 있습니다 .ls
>&3
그런 다음 를 time
통해 해당 파이프에 출력을 기록하고 /dev/fd/4
stdout ls
은 원본입니다.