프로세스를 생성하고 새 실행 파일을로드하는 데 몇 밀리 초가 걸리므로 정밀도가 실제로는 맞지 않습니다. 또한 많은 시스템의 CPU 시간은 최대 10ms의 슬라이스로 프로세스에 할당됩니다.
그러나 일부 sleep
구현에는 소수의 초가 걸리며 zsh와 ksh93은 모두 $SECONDS
특수 변수를로 소수로 만들 수 있습니다 typeset -F SECONDS
.
예 (zsh) :
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((1./70)); date +%s.%N; done | { head -n3;echo ..;tail -n3; }; echo $SECONDS
1350076317.374870501
1350076317.391034397
1350076317.407278461
..
1350076318.464585550
1350076318.480887660
1350076318.497133050
1.1393780000
죄송합니다. 다음을 기준으로 수면 시간을 조정할 수 있습니다 $SECONDS
.
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do sleep $((i/70. - SECONDS)); date +%s.%N; done | { head -n3;echo ...;tail -n3; }; echo $SECONDS
1350076420.262775654
1350076420.277012997
1350076420.291302750
../..
1350076421.219682227
1350076421.234134663
1350076421.248255685
1.0020580000
이 2 밀리 초는 아마도 마지막 sleep
과 date
명령 을 실행하는 것으로 설명 될 것입니다 .
또한 zsh에는 zselect
100 분의 1 초로 표시되는 제한 시간 이 내장되어 있습니다. ksh93은 sleep
내장되어 있으며 부동 소수점을 허용하며 printf
날짜 / 시간을 인쇄 할 수 있습니다.
$ typeset -F SECONDS=0; for ((i=1; i<=70; i++)); do ((i<4 || i>67)) && printf '%(%S.%N)T\n' now; sleep $((i/70.-SECONDS)); done; echo $SECONDS
20.823349000
20.837510000
20.851663000
21.780099000
21.794254000
21.808405000
0.9992358685
당신이 더 정확한 무엇을 원하는 경우에, 당신은 아마 실시간 기능이있는 실시간 운영 체제 또는 운영 체제를 할 것입니다 및 확실 하지 쉘을 사용합니다.