/usr/bin/time으로 메모리 최고 사용량만 얻는 방법은 무엇입니까?

/usr/bin/time으로 메모리 최고 사용량만 얻는 방법은 무엇입니까?

스크립트의 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는 timestderr에 자원 사용 정보를 출력하지만 다음을 사용하여 다른 곳에 쓰도록 지시할 수 있습니다.-o

{
  musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1

lsstdout과 stderr만 남겨두고 변수에 최대 메모리 사용량을 기록합니다 .

이는 원본 fd 1(stdout)을 명령 대체 외부의 fd 3에 복제하여 작동하므로 명령 대체 내에서 fd 4에서 명령 대체 파이프를 사용할 수 있게 만든 후 with 3>&1에 대한 원래 stdout을 복원할 수 있습니다 .ls>&3

그런 다음 를 time통해 해당 파이프에 출력을 기록하고 /dev/fd/4stdout ls은 원본입니다.

관련 정보