/usr/bin/time을 통해 최대 메모리 사용량을 얻는 방법은 무엇입니까?

/usr/bin/time을 통해 최대 메모리 사용량을 얻는 방법은 무엇입니까?

다음 명령을 사용하는 예제 와 같이 usr/bin/time스크립트의 RAM 사용량을 모니터링하고 지정된 제한을 초과하는지 확인할 수 있도록 변수에 저장하는 프로그램을 사용하여 스크립트를 작성하고 있습니다 .$mlimitls /

$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

ls변수의 최대 메모리 사용량은 "stdout" 및 "stderr"을 유지하면서 기록됩니다 .

작동 방식은 명령 대체 외부에서 원래 fd 1(stdout)이 fd 3에 복사되어 명령 대체 내부에서 3>&1fd 4에서 사용할 수 있게 된 후 명령 대체 파이프를 사용하여 ls원래 stdout을 복원할 수 있다는 것입니다.>&3

그런 다음 time출력을 해당 파이프에 기록하면 /dev/fd/4stdout ls이 원시 출력이 됩니다.

관련 정보