프로그램의 수면 시간을 얻는 방법

프로그램의 수면 시간을 얻는 방법

매일 실행하는 스크립트에 대한 통계를 수집하려고 합니다. 실제로 수면에 소비한 시간이 얼마나 되는지 알고 싶습니다. 모든 수면 주기의 합을 구할 수 있는 방법이 있나요? 예를 들어:

#some task
sleep 5
#some task
sleep 2

결과는 7이 되었으면 좋겠습니다. 스크립트에는 여러 루프와 조건이 포함된 많은 파일이 포함되어 있습니다. 이 솔루션을 사용하려면 스크립트를 실행하여 실제로 수면이 호출되는 내용과 호출 횟수를 확인해야 합니다.

답변1

빠르고 더러운 대답은 grep하고 awk를 사용하여 추가하는 것입니다.

grep -o 'sleep [0-9]\+' input.sh | awk '{ sum +=$2 } END { print sum }'

이는 grep"input.sh"를 검색하는 것을 의미합니다. 각 줄에는 -o해당 줄의 일치하는 부분만 인쇄합니다( ). 일치 항목은 sleep문자열 뒤에 0에서 9 사이의 숫자가 1개 이상 와야 합니다. 이제 인쇄할 내용이 생겼습니다.

sleep 5
sleep 2

이 목록을 여기에 보내고 awk행별로 처리한 다음 두 번째 열을 모두 합산합니다. 마지막으로 합계를 출력합니다.

참고: 이는 다소 취약한 솔루션입니다. 예를 들어, 주석 처리된 줄이 있는 경우:

# we used to do sleep 1000 here by it was too slow

총계에는 계속 포함됩니다. 스크립트에 대해 더 많이 알면 더 강력한 파이프라인을 만들 수 있습니다. 예를 들어 sleep호출이 항상 줄의 시작 부분에 있다는 것을 알고 있는 경우 grep을 앵커할 수 있습니다.

grep -o '^sleep [0-9]\+' | ...

그리고 수면시간이 많이 포함된 스크립트도 의심스럽습니다. 자동화를 구성하는 더 나은 방법은 거의 항상 존재하며 절전 모드는 대부분 테스트에만 유용합니다.

관련 정보