смотреть команду наименьший -n интервал


24

Какой наименьший интервал для команды часов?

Страница man и результаты поиска Google не указывают, каков нижний предел наименьшего интервала. Я нашел экспериментальным путем, это может быть меньше чем 1 секунда.

Чтобы проверить, я выполнил эту команду на брандмауэре:

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

Он явно обновляется быстрее, чем за одну секунду, но не ясно, действительно ли он выполняет обновления 100 мс.

Ответы:


22

На какой ты платформе?

В моем Linux (Ubuntu 14.10) на странице руководства написано:

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

Я только что проверил это с помощью скрипта, вызывающего C-программу, которая печатает метку времени с микросекундами, и это работает.


1
Платформа CentOS 6.6. Страница man-состояния гласит: «[-n <секунд>] По умолчанию программа запускается каждые 2 секунды; используйте -n или --interval для указания другого интервала». Он не определяет, какой самый низкий интервал. Благодарю за разъяснение.
Кайл,

11

На самом деле, вы на пределе. Страница людей делает обеспечить минимальное значение (по крайней мере на моей 2009, Linux версии). Здесь это идет:

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

Вы , вероятно , можете проверить , что при использовании dateчерез watch:

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

Если вы посмотрите на первую цифру в последнем поле (наносекунды), вы увидите, что она быстро увеличивается, то есть для каждой watchитерации добавляется ~ 100 мс.


10

watchКоманда включена в утилиты procps .

Наименьшее значение для -nпараметра - 0.1это жестко закодировано в источнике часов (см. Строки 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;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.