time
bash를 사용하는 사람들은 쉘 내장 과 /usr/bin/time
( ) 를 구별해야 한다고 들었습니다 time(1)
. 나는 프로그램 시간을 정해야 했고 echo
문자열 리디렉션을 사용하여 입력을 자동화하는 방법을 찾아야 했습니다 <<<
. 결과는 다음과 같습니다.
$ time python3 -c "a=input("");print(a)" <<< "12"
12
real 0m0.023s
user 0m0.020s
sys 0m0.000s
이 경우 쉘 내장 함수가 호출됩니다.
$ echo "12" | time python3 -c "a=input("");print(a)"
12
0.01user 0.00system 0:00.02elapsed 100%CPU (0avgtext+0avgdata 6524maxresident)k
0inputs+0outputs (0major+593minor)pagefaults 0swaps
time(1)
이 경우에 호출됩니다.
왜 이런 일이 발생합니까? 환경이 다른가요?
우분투 14.04 x86_64 사용
답변1
이것파이프 구조중간에는 시간이 허용되지 않으며 파이프라인 시작 부분에만 시간이 허용됩니다.
또한 time은 표시된 대로 "쉘 키워드"입니다 type time
.
하지만 금지된 건 아무것도 없어복합 명령(그리고 매번 시간):
time comm1 | ( time comm2 )
따라서 서브쉘을 사용하여 다음과 같이 이 문제를 해결할 수 있습니다.
echo "12" | ( time python3 -c "a=input("");print(a)" )
또는 다음과 같이 수행할 수도 있습니다.
echo "12" | { time python3 -c "a=input("");print(a)"; }
답변2
명령 에는 두 가지 유형이 있습니다 time
. 하나는 쉘에 내장되어 있으며 bash에 속합니다. 이것이 첫 번째 예에서 볼 수 있는 것입니다. 두 번째 것은 입니다. /usr/bin/time
이것은 두 번째로 보는 것입니다. 출력이 다른 이유는 출력을 쉘 내장으로 파이프할 수 없기 때문입니다.
더 많은 관련 내용을 보려면 여기를 클릭하세요
답변3
성능상의 이유로 명령 시간을 측정하고 싶다면 /usr/bin/time을 사용하지 않고 대신 ptime(1)(플랫폼에서 사용 가능한 경우)을 사용하는 것이 좋습니다. ptime은 나노초 해상도를 제공합니다. 또는 다음과 같은 최신 Bourne Shell을 사용합니다. Bourne Shell은 모든 최신 운영 체제에서 마이크로초 해상도로 모든 전경 명령(셸 내장 포함)의 자동 타이밍을 허용합니다. Bourne Shell에서 모든 전경 명령의 시간을 측정하려면 다음을 호출하고 set -o time
TIMEFORMAT을 다음과 같이 더 높은 해상도에 유용한 것으로 설정합니다.%6:E real %6U user %6S sys %P%% cpu %I+%Oio %Fpf+%Ww
/usr/bin/time은 일반적으로 10ms 또는 1ms의 고정 해상도를 갖습니다.