![명령을 실행하는 데 걸리는 시간을 어떻게 계산합니까? [복사]](https://linux55.com/image/49305/%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94%20%EB%8D%B0%20%EA%B1%B8%EB%A6%AC%EB%8A%94%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EA%B3%84%EC%82%B0%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
실행 중인 프로세스를 완료하는 데 걸리는 시간을 어떻게 알 수 있나요?
예:
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
시스템은 time
stderr로 인쇄하므로 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 내장 기능은 time
stdout 및 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
.