Sur ma machine, j'ai besoin d'exécuter un cycle qui itère 1 commande simple qui doit avoir un délai exprimé en fractions de seconde.
Disons que j'ai besoin de:
- pour enregistrer un fichier avec une énumération croissante (fichier-0, fichier-1, fichier-2, ...) généré par quelque chose de trivial pour cet exemple comme
time > file-$x
- Je dois le faire tous les 1/70 de seconde (à titre d'exemple) car je voudrais exprimer mon temps avec des fractions de seconde.
Comment puis-je être vraiment précis et avoir tout exprimé avec un script bash?
La fraction peut générer une quantité indéterminable, j'ai besoin d'être précis et j'ai donc besoin d'au moins 4-5 décimales.
Peut-être que vous pouvez simplement exécuter
?
sur ma
archlinux
distribution:la source
sleep
permet des fractions? pouvez-vous offrir un exemple complet avec une fausse boucle?La création d'un processus et le chargement d'un nouvel exécutable prendront probablement quelques millisecondes, donc ce type de précision n'a pas vraiment de sens. Notez également que le temps CPU sur de nombreux systèmes est alloué aux processus par tranches allant jusqu'à 10 ms.
Cela dit, certaines
sleep
implémentations prennent un nombre fractionnaire de secondes, et zsh et ksh93 peuvent tous deux$SECONDS
fractionner leur variable spéciale avectypeset -F SECONDS
.Exemple (zsh):
Oups, il a dérivé. Vous pouvez ajuster le temps de sommeil en fonction de
$SECONDS
:Ces 2 millisecondes supplémentaires doivent probablement être prises en compte pour l'exécution des dernières commandes
sleep
etdate
.Notez également que zsh a une fonction
zselect
intégrée avec un délai d'expiration exprimé en centième de seconde. Et ksh93 asleep
intégré (et accepte les virgules flottantes) et saprintf
peut imprimer la date / heure.Si vous voulez quelque chose de plus précis, vous voudrez probablement un système d'exploitation en temps réel ou un système d'exploitation avec des capacités en temps réel et certainement pas utiliser un shell.
la source
sleep 1/70
non autorisé sur ma machine ...Si votre shell
sleep
n'accepte pas la fraction, utilisez perl.Si vous avez besoin de connaître la fraction, utilisez
echo "scale=5; 1/70" | bc
la source
Sous Alpine Linux (Busybox), vous pouvez faire une boucle pendant quelques microsecondes avec
usleep 10
(équivalent à0.00001
une seconde)GNU sleep
prend en charge des fractions de seconde:sleep 0.00001
la source