Bir süreç oluşturmak ve içine yeni bir yürütülebilir dosya yüklemek birkaç milisaniye sürer, bu nedenle bu tür bir hassasiyet gerçekten mantıklı değildir. Ayrıca, birçok sistemdeki CPU süresinin 10 ms'ye kadar dilimlerle ayrıldığını unutmayın.
Bununla birlikte, bazı sleep
uygulamalar kesirli sayıda saniye alır ve hem zsh hem de ksh93 $SECONDS
özel değişkenlerini kesirli hale getirebilir typeset -F SECONDS
.
Örnek (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
Üzgünüz, sürüklendi. Uyku süresini aşağıdakilere göre ayarlayabilirsiniz $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
Bu 2 ekstra milisaniye muhtemelen sonuncuyu sleep
ve date
komutları çalıştırırken hesaba katılmalıdır .
Ayrıca zsh'ın zselect
saniyenin yüzde biri cinsinden zaman aşımına sahip bir yerleşimi olduğunu unutmayın . Ve ksh93 sleep
yerleşik (ve kayan noktaları kabul eder) ve printf
tarih / saatleri yazdırabilir.
$ 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
Eğer daha hassas bir şey istiyorsanız, muhtemelen gerçek zamanlı yetenekleri ile gerçek zamanlı işletim sistemi veya işletim sistemi isteyeceksiniz ve kesinlikle değil bir kabuk kullanın.