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ı sleepuygulamalar 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 sleepve datekomutları çalıştırırken hesaba katılmalıdır .
Ayrıca zsh'ın zselectsaniyenin yüzde biri cinsinden zaman aşımına sahip bir yerleşimi olduğunu unutmayın . Ve ksh93 sleepyerleşik (ve kayan noktaları kabul eder) ve printftarih / 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.