xem lệnh nhỏ nhất -n khoảng


24

Khoảng nhỏ nhất cho lệnh đồng hồ là gì?

Trang tìm kiếm và tìm kiếm của Google không cho biết giới hạn dưới của khoảng nhỏ nhất là bao nhiêu. Tôi tìm thấy thông qua thử nghiệm nó có thể nhỏ hơn 1 giây.

Để kiểm tra, tôi đã chạy lệnh này chạy trên tường lửa:

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

Nó rõ ràng cập nhật nhanh hơn một giây, nhưng không rõ liệu nó có thực sự cập nhật 100ms hay không.

Câu trả lời:


22

Bạn đang ở trên nền tảng nào?

Trên Linux của tôi (Ubuntu 14.10), trang man nói:

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

Tôi vừa thử nghiệm điều này với một kịch bản gọi một chương trình C in dấu thời gian bằng micro giây và nó hoạt động.


1
Nền tảng là CentOS 6.6. Trang Man ghi: "[-n <giây>] Theo mặc định, chương trình được chạy cứ sau 2 giây; sử dụng -n hoặc --interval để chỉ định một khoảng khác nhau." Nó không xác định khoảng thời gian thấp nhất là gì. Cảm ơn bạn đã làm rõ.
Kyle

11

Trên thực tế, bạn đang ở giới hạn. Man page không cung cấp một giá trị tối thiểu (ít nhất là vào năm 2009, phiên bản Linux của tôi). Nó đi từ đây:

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

Bạn có thể kiểm tra bằng cách sử dụng datethông qua watch:

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

Nếu bạn nhìn vào chữ số đầu tiên trong trường cuối cùng (nano giây), bạn sẽ thấy nó tăng nhanh, nghĩa là cứ sau mỗi watchlần lặp, ~ 100ms được thêm vào.


10

watchlệnh được bao gồm trong các tiện ích Procps .

Giá trị nhỏ nhất cho -ntùy chọn là 0.1, nó được mã hóa cứng trong nguồn đồng hồ (xem dòng 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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.