guarda il comando il più piccolo intervallo -n


24

Qual è l'intervallo più piccolo per il comando watch?

La pagina man e le ricerche di Google non indicano quale sia il limite inferiore dell'intervallo più piccolo. Ho scoperto attraverso la sperimentazione che può essere inferiore a 1 secondo.

Per testare, ho eseguito questo comando eseguito su un firewall:

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

Si aggiorna chiaramente più velocemente di un secondo, ma non è chiaro se stia davvero facendo aggiornamenti da 100 ms.

Risposte:


22

Quale piattaforma utilizzi?

Sul mio Linux (Ubuntu 14.10) la pagina man dice:

 -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.

Ho appena provato questo con uno script che chiama un programma C che stampa il timestamp con microsecondi e funziona.


1
La piattaforma è CentOS 6.6. Stati della pagina man: "[-n <secondi>] Per impostazione predefinita, il programma viene eseguito ogni 2 secondi; utilizzare -n o --interval per specificare un intervallo diverso." Non specifica quale sia l'intervallo più basso. Grazie per il chiarimento.
Kyle,

11

In realtà, sei al limite. La pagina man non fornire un valore minimo (almeno sul mio 2009, versione per Linux). Eccolo:

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

Probabilmente puoi verificarlo usando dateattraverso watch:

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

Se dai un'occhiata alla prima cifra nell'ultimo campo (nanosecondi), la vedrai aumentare rapidamente, il che significa che per ogni watchiterazione vengono aggiunti ~ 100 ms.


10

watchil comando è incluso nelle utility procps .

Il valore più piccolo per l' -nopzione è 0.1, è hardcoded nella sorgente dell'orologio (vedi riga 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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.