Das Spawnen eines Prozesses und das Laden einer neuen ausführbaren Datei dauert wahrscheinlich einige Millisekunden, sodass eine solche Genauigkeit nicht wirklich Sinn macht. Beachten Sie auch, dass die CPU-Zeit auf vielen Systemen den Prozessen durch Slices von bis zu 10 ms zugewiesen wird.
Allerdings sleep
dauern einige Implementierungen Bruchzahlen von Sekunden, und sowohl zsh als auch ksh93 können ihre $SECONDS
spezielle Variable mit fraktionierentypeset -F SECONDS
.
Beispiel (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
Hoppla, es ist gewandert. Sie können die Schlafzeit einstellen, basierend auf $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
Diese 2 zusätzlichen Millisekunden sind wahrscheinlich für die Ausführung der Befehle last sleep
und zu berücksichtigen date
.
Beachten Sie auch, dass in zsh eine zselect
Zeitüberschreitung in Hundertstelsekunden eingebaut ist. Und ksh93 hat sleep
eingebaut (und akzeptiert Gleitkommazahlen) und printf
kann Datum / Uhrzeit ausgeben.
$ 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
Wenn Sie genauere Informationen benötigen, benötigen Sie wahrscheinlich ein Echtzeitbetriebssystem oder ein Betriebssystem mit Echtzeitfähigkeiten, und Sie benötigen mit Sicherheit keine Shell.