Đôi khi, khi bạn thực hiện một lệnh trong Linux, bạn có thể muốn chạy lệnh đó trong một khoảng thời gian nhất định. Có một tiện ích dòng lệnh - timeout - được phát triển riêng cho mục đích này. Trong bài viết này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh này bằng một số ví dụ dễ hiểu.
Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong hướng dẫn này đều đã được thử nghiệm trên máy Ubuntu 18.04 LTS.
Và đây là cách trang hướng dẫn của công cụ giải thích về nó:
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động của công cụ này.
Ví dụ: nếu bạn muốn timeout lệnh ping sau 5 giây, đây là cách bạn có thể sử dụng timeout trong trường hợp này.
Trong trường hợp đầu tiên, tôi để lệnh timeout chạy thành công và như bạn thấy, trạng thái thoát là 124. Tuy nhiên, trong lần chạy thứ hai, tôi đã buộc lệnh dừng bằng Ctrl+C và trong trường hợp đó, trạng thái thoát là 0.
Nhưng trong trường hợp bạn muốn timeout trả về trạng thái của lệnh đầu vào ngay cả khi timeout chạy thành công, bạn sẽ phải sử dụng tùy chọn dòng lệnh --preserve-status.
Ví dụ:
Tuy nhiên, nếu muốn, bạn có thể thay đổi tín hiệu được gửi bởi timeout. Đối với điều này, bạn sẽ phải sử dụng tùy chọn dòng lệnh -s và chỉ định tín hiệu bạn muốn timeout gửi làm đầu vào.
Ví dụ:
Để lấy danh sách các tín hiệu khả dụng mà bạn có thể gửi, hãy chạy lệnh sau:
Đây là cách trang hướng dẫn giải thích:
Vì vậy, như bạn có thể thấy, bạn cần chỉ định khoảng thời gian để timeout biết sau bao lâu thì tín hiệu này sẽ được gửi.
Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong hướng dẫn này đều đã được thử nghiệm trên máy Ubuntu 18.04 LTS.
Lệnh timeout của Linux
Đúng như tên gọi, lệnh timeout trong Linux cho phép bạn thực thi một lệnh có giới hạn thời gian. Sau đây là cú pháp của nó:
Mã:
timeout [OPTION] DURATION COMMAND [ARG]...
Mã:
timeout - chạy lệnh có giới hạn thời gian
Khởi động COMMAND và tắt lệnh nếu vẫn chạy sau DURATION
Câu hỏi 1. Làm thế nào để sử dụng lệnh timeout?
Cách sử dụng cơ bản khá dễ - chỉ cần thực hiện 'timeout' bằng cách chỉ định giá trị timeout (tính bằng giây) cũng như lệnh bạn muốn chạy trong đầu vào.Ví dụ: nếu bạn muốn timeout lệnh ping sau 5 giây, đây là cách bạn có thể sử dụng timeout trong trường hợp này.
Mã:
timeout 5 ping google.com
Câu hỏi 2. Làm thế nào để có được trạng thái thoát của lệnh trong đầu ra?
Theo mặc định, nếu lệnh timeout thành công, nó sẽ trả về 124 là trạng thái thoát. Sau đây là một ví dụ:Trong trường hợp đầu tiên, tôi để lệnh timeout chạy thành công và như bạn thấy, trạng thái thoát là 124. Tuy nhiên, trong lần chạy thứ hai, tôi đã buộc lệnh dừng bằng Ctrl+C và trong trường hợp đó, trạng thái thoát là 0.
Nhưng trong trường hợp bạn muốn timeout trả về trạng thái của lệnh đầu vào ngay cả khi timeout chạy thành công, bạn sẽ phải sử dụng tùy chọn dòng lệnh --preserve-status.
Ví dụ:
Mã:
timeout --preserve-status 5 ping google.com
Câu hỏi 3. Làm thế nào để thay đổi tín hiệu timeout gửi?
Không có ích gì khi đoán rằng timeout hoạt động bằng cách gửi tín hiệu đến lệnh đầu vào để lệnh sau dừng thực thi khi thời hạn đến gần. Theo mặc định,SIGTERM
được lệnh sử dụng.Tuy nhiên, nếu muốn, bạn có thể thay đổi tín hiệu được gửi bởi timeout. Đối với điều này, bạn sẽ phải sử dụng tùy chọn dòng lệnh -s và chỉ định tín hiệu bạn muốn timeout gửi làm đầu vào.
Ví dụ:
Mã:
timeout -s SIGKILL [COMMAND]
Mã:
kill -l
Câu hỏi 4. Làm thế nào để timeout tự động gửi tín hiệu KILL?
Đôi khi, bạn có thể gặp phải lệnh đầu vào tiếp tục chạy ngay cả sau khi timeout gửi tín hiệu ban đầu. Đối với những trường hợp như thế này, timeout cung cấp tùy chọn '--kill-after'.Đây là cách trang hướng dẫn giải thích:
Mã:
-k, --kill-after=DURATION
cũng gửi tín hiệu KILL nếu COMMAND vẫn đang chạy
lâu như vậy sau khi tín hiệu ban đầu được gửi