다음 명령을 사용하는 예제 와 같이 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
이 원시 출력이 됩니다.