смотреть команду наименьший -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.