명령을 실행하는 데 걸리는 시간을 어떻게 계산합니까? [복사]

명령을 실행하는 데 걸리는 시간을 어떻게 계산합니까? [복사]

실행 중인 프로세스를 완료하는 데 걸리는 시간을 어떻게 알 수 있나요?

예:

 date; dd bs=1m if=/foo of=bar; date

^이 예시의 해상도는 1초뿐입니다.

모든 인클로저가 허용됩니다.

답변1

사용 time:

$ time somecommand --with=somearguments

time명령줄의 나머지 부분(이 경우 somecommand --with=somearguments)이 실행되고 명령이 완료되면 경과 시간이 인쇄됩니다.

예제 출력:

$ time somecommand --with=somearguments
...
... (output of somecommand)
...
real    0m5,020s
user    0m0,010s
sys     0m0,010s

일반적으로 필요한 정보는 입니다 real. 이 예에서는 명령을 실행하는 데 약 5초가 걸립니다. 다른 번호에 대한 자세한 내용은 여기에서 확인할 수 있습니다.https://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1


위의 출력 예는 bash 내장 명령에서 나온 것입니다. time대부분의 쉘에 내장된 명령입니다. 시스템 도 있습니다 time. 출력 형식이 다르지만 그 외에는 기본적으로 쉘 내장 함수와 동일하게 동작합니다.

시스템 명령을 사용하려면 다음을 수행하십시오.

$ /usr/bin/time somecommand --what=islove

또는

$ env time somecommand --baby=donthurtme

더 많은 내용이 있지만 이는 이 Q&A의 범위를 벗어납니다.

시스템을 사용한 출력 예 time:

$ env time somecommand --donthurtme=nomore
...
... (output of somecommand)
...
0.00user 0.01system 0:06.02elapsed 0%CPU (0avgtext+0avgdata 3656maxresident)k
0inputs+0outputs (0major+1089minor)pagefaults 0swaps

일반적으로 필요한 정보는 입니다 elapsed. 이 예에서 명령은 약 6초가 소요됩니다. 다른 숫자가 무엇을 의미하는지에 대한 좋은 설명을 인터넷에서 찾지 못했습니다. 맨페이지를 읽어야 합니다:http://man7.org/linux/man-pages/man1/time.1.html

셸 내장 명령과 시스템 명령의 차이점에 대한 자세한 내용은 여기를 참조하세요.내장 명령과 비 내장 명령의 차이점은 무엇입니까?

시스템 명령을 호출하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다.전체 경로를 지정하지 않고 내장 Bash 대신 시스템 명령을 사용하십시오.


시스템 시간 출력이 더 유연해졌습니다. 다음은 몇 가지 데모입니다.

시스템의 출력을 변경할 수 있습니다 time. 예를 들어, -p쉘 내장과 유사한 출력을 얻으 려면 다음을 수행하십시오 time.

$ /usr/bin/time -p somecommand --what=isyourname
...
real 0:06.02
user 0.00
sys 0.01

또는 -f다음을 사용하여 자신만의 형식을 작성하세요.

$ /usr/bin/time -f %E somecommand --what=isyourquest
...
0:06.02

%E"과거" 부분입니다. 일반적으로 가장 관심을 갖는 부분입니다.

time완전성을 위해 다음 변수를 변경하여 bash 내장 출력 형식을 변경할 수도 있습니다 TIMEFORMAT. 추가 정보:https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-TIMEFORMAT


출력을 리디렉션하거나 캡처하는 방법

관찰 명령을 시연하려면 다음을 수행하십시오 hellostdoutstderr.

#!/bin/sh
sleep 0.5
echo "hello out"
echo "hello err" >&2

통화 예:

 $ ./hellostdoutstderr 
hello out
hello err

stdout과 stderr를 별도로 캡처

$ ./hellostdoutstderr >stdoutfile 2>stderrfile

$ cat stdoutfile
hello out

$ cat stderrfile
hello err

시스템은 timestderr로 인쇄하므로 stderr 리디렉션을 통해 캡처할 수 있습니다.

$ /usr/bin/time ./hellostdoutstderr >stdoutfile 2>stderrfile

$ cat stdoutfile
hello out

$ cat stderrfile
hello err
0.00user 0.00system 0:00.50elapsed 1%CPU (0avgtext+0avgdata 3672maxresident)k
0inputs+16outputs (0major+311minor)pagefaults 0swaps

time별도의 파일로 인쇄하도록 시스템에 지시할 수 있습니다.

$ /usr/bin/time -o timeoutfile ./hellostdoutstderr >stdoutfile 2>stderrfile

$ cat stdoutfile
hello out

$ cat stderrfile
hello err

$ cat timeoutfile
0.00user 0.00system 0:00.50elapsed 1%CPU (0avgtext+0avgdata 3676maxresident)k
0inputs+16outputs (0major+309minor)pagefaults 0swaps

bash 내장 기능은 timestdout 및 stderr이 리디렉션되더라도 항상 터미널에 인쇄됩니다. 이는 내장되어 있고 원하는 모든 작업을 수행할 수 있기 때문에 가능합니다(셸에서).

$ time ./hellostdoutstderr >stdoutfile 2>stderrfile

real    0m0,511s
user    0m0,005s
sys 0m0,006s

이 예에서는 stdout과 stderr이 모두 파일로 리디렉션됩니다. 그러나 bash 내장 명령은 time여전히 ​​터미널에 인쇄됩니다.

몇 가지 트릭을 사용하면 bash 내장 기능의 출력을 캡처하는 것이 여전히 가능합니다. 하지만 시스템 명령을 사용하는 것이 더 쉽다면 왜 bash와 싸울까요? 원하시면 다음과 같은 추가 정보를 확인하세요.https://www.cyberciti.biz/faq/unix-linux-time-command-examples-usage-syntax/


더 복잡한 명령의 시간을 측정하려면 몇 가지 옵션이 있습니다.

두 명령을 차례로 시간을 측정하려는 경우

$ time { command1 ; command2 ; }

파이프에도 적합

$ time { command1 | command2 ; }

더 복잡한 내용에 대해서는

$ time sh -c ' complex command chain '

하지만 인용문이나 기타 헛소리를 조심하세요. 명령을 스크립트에 넣고 스크립트 시간을 측정하는 것이 더 좋습니다.

$ time ./script.sh

핵심요약: time명령 앞에 추가하세요. 스크립트 내에서 시간을 측정하려면 를 사용하세요 /usr/bin/time.

관련 정보