comando watch menor intervalo -n


24

Qual é o menor intervalo para o comando watch?

A página de manual e as pesquisas do Google não indicam qual é o menor limite inferior do intervalo. Eu descobri através da experimentação que pode ser menor que 1 segundo.

Para testar, executei este comando em um firewall:

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

Ele atualiza claramente mais rápido que um segundo, mas não está claro se ele realmente está fazendo atualizações de 100 ms.

Respostas:


22

Em que plataforma você está?

No meu Linux (Ubuntu 14.10), a página do manual diz:

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

Acabei de testar isso com um script chamando um programa C que imprime o carimbo de data / hora com microssegundos e funciona.


1
A plataforma é o CentOS 6.6. A página do manual declara: "[-n <segundos>] Por padrão, o programa é executado a cada 2 segundos; use -n ou --interval para especificar um intervalo diferente." Não especifica qual é o intervalo mais baixo. Obrigado pelo esclarecimento.
Kyle

11

Na verdade, você está no limite. A página man não fornecer um valor mínimo (pelo menos no meu 2009, versão Linux). Aqui vai:

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

Você provavelmente pode verificar isso usando dateatravés de watch:

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

Se você der uma olhada no primeiro dígito no último campo (nanossegundos), verá que ele aumenta rapidamente, o que significa que, para cada watchiteração, são adicionados ~ 100 ms.


10

watchO comando está incluído nos utilitários procps .

O menor valor para a -nopção é que 0.1ele está codificado na fonte do relógio (consulte as linhas 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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.