watch befehl kleinstes -n intervall


24

Was ist das kleinste Intervall für den Überwachungsbefehl?

Die Handbuchseite und die Google-Suche geben nicht die kleinste Intervalluntergrenze an. Ich habe durch Experimente herausgefunden, dass es kleiner als 1 Sekunde sein kann.

Zum Testen habe ich diesen Befehl auf einer Firewall ausgeführt:

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

Es wird deutlich schneller als eine Sekunde aktualisiert, aber es ist nicht klar, ob es wirklich 100 ms Updates ausführt.

Antworten:


22

Auf welcher Plattform bist du?

Auf meinem Linux (Ubuntu 14.10) heißt es in der Manpage :

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

Ich habe dies gerade mit einem Skript getestet, das ein C-Programm aufruft, das den Zeitstempel in Mikrosekunden ausgibt, und es funktioniert.


1
Plattform ist CentOS 6.6. Auf der Manpage heißt es: "[-n <Sekunden>] Standardmäßig wird das Programm alle 2 Sekunden ausgeführt. Verwenden Sie -n oder --interval, um ein anderes Intervall anzugeben." Das niedrigste Intervall wird nicht angegeben. Danke für die Klarstellung.
Kyle

11

Eigentlich bist du am Limit. Der Mann Seite nicht bietet einen minimalen Wert (zumindest auf meiner 2009, Linux - Version). Hier kommt's:

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

Sie können sich wahrscheinlich , dass der Check durch die Verwendung datedurch watch:

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

Wenn Sie sich die erste Ziffer im letzten Feld ansehen (Nanosekunden), sehen Sie, dass sie sich schnell erhöht, was bedeutet, dass für jede watchIteration ~ 100 ms hinzugefügt werden.


10

watchBefehl ist in procps- Dienstprogrammen enthalten.

Der kleinste Wert für die -nOption ist 0.1, dass sie in der Überwachungsquelle fest codiert ist (siehe Zeile 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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.