Perhatikan perintah terkecil -n interval


24

Berapa interval terkecil untuk perintah arloji?

Halaman manual dan pencarian Google tidak menunjukkan apa batas bawah interval terkecil. Saya menemukan melalui eksperimen itu bisa lebih kecil dari 1 detik.

Untuk menguji, saya menjalankan perintah ini dijalankan pada firewall:

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

Jelas pembaruan lebih cepat dari satu detik, tetapi tidak jelas apakah itu benar-benar melakukan pembaruan 100 ms.

Jawaban:


22

Anda berada di platform apa?

Di Linux saya (Ubuntu 14.10) halaman manual mengatakan:

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

Saya baru saja menguji ini dengan sebuah skrip yang memanggil program-C yang mencetak cap waktu dengan mikrodetik dan itu berfungsi.


1
Platform adalah CentOS 6.6. Halaman manual menyatakan: "[-n <detik>] Secara default, program dijalankan setiap 2 detik; gunakan -n atau --interval untuk menentukan interval yang berbeda." Itu tidak menentukan apa interval terendah. Terimakasih atas klarifikasinya.
Kyle

11

Sebenarnya, Anda berada pada batasnya. Halaman manual memang memberikan nilai minimal (setidaknya pada 2009 saya, versi Linux). Ini dia:

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

Anda mungkin dapat memeriksanya dengan menggunakan datemelalui watch:

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

Jika Anda melihat angka pertama di bidang terakhir (nanoseconds), Anda akan melihatnya dengan cepat bertambah, artinya untuk setiap watchiterasi, ~ 100ms ditambahkan.


10

watchperintah termasuk dalam utilitas procps .

Nilai terkecil untuk -nopsi adalah 0.1, hardcoded di sumber arloji (lihat baris 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;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.