commande watch intervalle -n le plus petit


24

Quel est le plus petit intervalle pour la commande watch?

La page de manuel et les recherches Google n'indiquent pas la limite inférieure de l'intervalle le plus petit. J'ai trouvé grâce à l'expérimentation qu'elle peut être inférieure à 1 seconde.

Pour tester, j'ai exécuté cette commande exécutée sur un pare-feu:

watch -n 0.1 cat /sys/class/net/eth1/statistics/rx_bytes

Il se met clairement à jour plus rapidement qu'une seconde, mais il n'est pas clair s'il effectue vraiment des mises à jour de 100 ms.

Réponses:


22

Sur quelle plateforme êtes-vous?

Sur mon Linux (Ubuntu 14.10), la page de manuel indique:

 -n, --interval seconds
          Specify  update  interval. The  command will not allow quicker
          than 0.1 second interval, in which the smaller values  are  con‐
          verted.

Je viens de tester cela avec un script appelant un programme C qui imprime l'horodatage en microsecondes et cela fonctionne.


1
La plate-forme est CentOS 6.6. La page de manuel indique: "[-n <secondes>] Par défaut, le programme est exécuté toutes les 2 secondes; utilisez -n ou --interval pour spécifier un intervalle différent." Il ne précise pas quel est l'intervalle le plus bas. Merci pour la clarification.
Kyle

11

En fait, vous êtes à la limite. La page de manuel ne fournit une valeur minimale (au moins sur mon 2009, la version Linux). Ça y est:

-n, --interval seconds
Specify update interval. The command will not allow quicker 
than 0.1 second interval, in which the smaller values are converted.

Vous pouvez probablement vérifier cela en utilisant datevia watch:

$ watch -n0.1 date +'%H:%M:%S:%N'

Si vous regardez le premier chiffre du dernier champ (nanosecondes), vous le verrez rapidement incrémenter, ce qui signifie qu'à chaque watchitération, ~ 100 ms sont ajoutés.


10

watchest incluse dans les utilitaires procps .

La plus petite valeur pour l' -noption est 0.1, elle est codée en dur dans la source de la montre (voir ligne 171-172) :

case 'n':
    {
        char *str;
        interval = strtod(optarg, &str);
        if (!*optarg || *str)
            do_usage();
        if(interval < 0.1)
            interval = 0.1;
        if(interval > ~0u/1000000)
            interval = ~0u/1000000;
    }
    break;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.