En mi máquina, necesito ejecutar un ciclo que repita 1 comando simple que debe tener un retraso expresado en fracciones de segundo.
Digamos que necesito:
- para guardar un archivo con una enumeración creciente (archivo-0, archivo-1, archivo-2, ...) generado por algo trivial para este ejemplo como
time > file-$x
- Necesito hacer esto cada 1/70 de segundo (como ejemplo) porque me gustaría expresar mi tiempo con fracciones de segundo.
¿Cómo puedo ser realmente preciso y tener todo expresado con un script bash?
La fracción puede generar una cantidad indeterminable, necesito ser preciso y por lo tanto necesito al menos 4-5 decimales.
Quizás puedas simplemente correr
?
en mi
archlinux
distro:fuente
sleep
permite fracciones? ¿Puedes ofrecer un ejemplo completo con un bucle falso?Es probable que generar un proceso y cargar un nuevo ejecutable en él tarde unos pocos milisegundos, por lo que ese tipo de precisión realmente no tiene sentido. También tenga en cuenta que el tiempo de CPU en muchos sistemas se asigna a los procesos por segmentos de hasta 10 ms.
Dicho esto, algunas
sleep
implementaciones toman números fraccionales de segundos, y tanto zsh como ksh93 pueden hacer que su$SECONDS
variable especial sea fraccional contypeset -F SECONDS
.Ejemplo (zsh):
Vaya, se fue a la deriva. Puede ajustar el tiempo de sueño según
$SECONDS
:Esos 2 milisegundos adicionales probablemente se deban a ejecutar el último
sleep
y losdate
comandos.También tenga en cuenta que zsh tiene un valor
zselect
incorporado con tiempo de espera expresado en centésimas de segundo. Y ksh93 se hasleep
incorporado (y acepta puntos flotantes) yprintf
puede imprimir fechas / horas.Si desea algo más preciso, es probable que desee un sistema operativo en tiempo real o un sistema operativo con capacidades en tiempo real y ciertamente no usar un shell.
fuente
sleep 1/70
no permitido en mi máquina ...Si su caparazón
sleep
no acepta fracción, use perl.Si necesita averiguar la fracción, use
echo "scale=5; 1/70" | bc
fuente
En Alpine Linux (Busybox) puede recorrer microsegundos con
usleep 10
(equivalente a0.00001
un segundo)GNU sleep
admite fracciones de segundo:sleep 0.00001
fuente