Le sommeil est une commande très populaire et nous pouvons commencer à dormir à partir de 1 seconde:
# wait one second please
sleep 1
mais quelle est l'alternative si je dois attendre seulement 0,1 seconde ou entre 0,1 et 1 seconde?
- remarque: sous Linux ou OS X
sleep 0.XXX
fonctionne bien, mais sous Solarissleep 0.1
ousleep 0.01
- syntaxe illégale
echo "" >/dev/null
Réponses:
Bash a un sommeil "chargeable" qui prend en charge une fraction de seconde et élimine les frais généraux d'une commande externe:
Ensuite:
L'inconvénient est que les éléments chargeables ne peuvent pas être fournis avec votre
bash
fichier binaire, vous devez donc les compiler vous-même, comme indiqué (bien que sous Solaris, ce ne soit pas nécessairement aussi simple que ci-dessus).Depuis
bash-4.4
septembre 2016, tous les objets chargeables sont désormais construits et installés par défaut sur les plates-formes qui le prennent en charge, bien qu'ils soient générés sous la forme de fichiers à objets partagés séparés et sans.so
suffixe. À moins que votre distribution / votre système d’exploitation n’ait fait quelque chose de créatif, vous devriez pouvoir le faire:(La page de manuel implique que le
BASH_LOADABLES_PATH
réglage est automatique, je constate que ce n'est pas le cas dans la distribution officielle à partir de la version 4.4.12. Si et quand il est correctement défini, vous n'aurez besoin que de laenable -f filename commandname
manière requise.)Si cela ne convient pas, la prochaine chose à faire est de créer ou d’obtenir
sleep
GNU coreutils, ceci prend en charge la fonctionnalité requise. Lasleep
commande POSIX est minimale, les anciennes versions de Solaris ne l'implémentant que. Solaris 11sleep
prend en charge les secondes fractionnelles.En dernier recours, vous pouvez utiliser
perl
(ou tout autre script que vous avez sous la main) en précisant que l'initialisation de l'interpréteur peut être comparable au temps de sommeil souhaité:la source
expect
vous pouvez probablement simplement utiliser "after N
", où N est millisecondes, directement dans votre script.usleep
comme @Luis Vazquez et @sebix writeLa documentation de la
sleep
commande de coreutils indique:Par conséquent , vous pouvez utiliser
sleep 0.1
,sleep 1.0e-1
et des arguments similaires.la source
Sleep accepte les nombres décimaux afin que vous puissiez le décomposer comme ceci:
1/2 de seconde
1/100 de seconde
Donc, pendant une milliseconde, vous voudriez
la source
sleep .5
Essayez ceci pour déterminer la précision:
Combinaison de la solution de mr.spuratic et de la solution de coles .
la source
Vous pouvez simplement utiliser
usleep
. Cela prend microsecondes (= 1e-6 secondes) en paramètre, donc pour dormir 1 milliseconde, vous devez entrer:la source
$ usleep
No command 'usleep' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
usleep: command not found
usleep
partie duinitscripts
paquet qui est standard au moins dans toutes les distributions dérivées de Red Hat; incluant au moins RHEL, CentOS, Fedora, Mageia / Mandriva et SuSE. Voici un exemple: `` ``sleep
(de coreutils ) fonctionne avec des secondes -usleep
(de initscripts ) fonctionne avec des microsecondesJ'ai eu le même problème (pas de shell usleep sur Solaris) alors j'ai écrit le mien ainsi:
Ne vérifie pas les arguments - je vous en recommanderais un bien écrit si vous voulez le conserver, mais que (gcc usleep.c -o usleep) vous sortira d'un trou.
la source
usleep()
appel à nuif(argc == 1) { usleep(atoi(argv[1])); }
pour éviter l'indexation en dehors des limites du tableau, ce qui peut entraîner un certain nombre de comportements inattendus.if (argc == 2) { usleep(atoi(argv[1])); }
...usleep
unité est μs, donc pour attendre 1 seconde, vous devez fournir un argument 1000000.atoi()
est un choix horrible pour convertir une chaîne en unint
. Qu'est-ce queatoi( "STRING" )
retourne?atoi()
n'a aucun moyen de retourner une erreur.J'aime l'idée de dormir, mais je ne peux pas faire de commentaire en dessous. Comme cela m'a aidé, j'espère que ma suggestion pourra améliorer l'idée de dormir.
https://github.com/fedora-sysv/initscripts/blob/3c3fe4a4d1b2a1113ed302df3ac9866ded51b01b/src/usleep.c est le code source actuel de usleep.c sur l'écosystème de la douve rouge.
Essayez de compiler cela dans votre Solaris. Vous aurez probablement besoin de https://www.opencsw.org/packages/libpopt0/ .
la source