komenda watch najmniejsza -n interwał


24

Jaki jest najmniejszy interwał dla polecenia oglądania?

Strona podręcznika i wyszukiwania w Google nie wskazują, jaki jest dolny limit najmniejszego interwału. Odkryłem przez eksperyment, że może być krótszy niż 1 sekunda.

Aby przetestować, uruchomiłem polecenie uruchomione na zaporze:

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

Szybko aktualizuje się szybciej niż sekunda, ale nie jest jasne, czy naprawdę robi aktualizacje 100 ms.

Odpowiedzi:


22

Na jakiej platformie jesteś?

W moim systemie Linux (Ubuntu 14.10) strona podręcznika mówi:

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

Właśnie przetestowałem to za pomocą skryptu wywołującego program C, który drukuje znacznik czasu w mikrosekundach i działa.


1
Platformą jest CentOS 6.6. Strona podręcznika stwierdza: „[-n <sekundy>] Domyślnie program jest uruchamiany co 2 sekundy; użyj -n lub --interval, aby określić inny interwał.” Nie określa najniższego przedziału. Dziękuję za wyjaśnienie.
Kyle,

11

W rzeczywistości jesteś na granicy. Strona człowiek ma zapewnić minimalną wartość (przynajmniej na moim 2009, wersja Linux). Oto jest:

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

Prawdopodobnie można sprawdzić, korzystając datez watch:

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

Jeśli spojrzysz na pierwszą cyfrę w ostatnim polu (nanosekundy), zobaczysz, że szybko rośnie, co oznacza, że ​​dla każdej watchiteracji dodaje się ~ 100 ms.


10

watchpolecenie jest zawarte w narzędziach procps .

Najmniejszą wartością dla -nopcji jest to 0.1, że jest zakodowana na stałe w źródle oglądania (patrz linia 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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.