Lệnh timeout của Linux được giải thích cho người mới bắt đầu (có ví dụ)

theanh

Administrator
Nhân viên
Đô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.

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]...
Và đây là cách trang hướng dẫn của công cụ giải thích về nó:
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
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.

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]
Để 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:
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
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.

Kết luận​

Tùy thuộc vào loại công việc bạn làm, lệnh timeout có thể chứng minh là một công cụ khá hữu ích. Ở đây, trong hướng dẫn này, chúng tôi đã thảo luận về phần lớn các tùy chọn mà tiện ích này cung cấp. Sau khi thực hành xong các tùy chọn này, bạn có thể tìm hiểu thêm về timeout bằng cách truy cập trang hướng dẫn của tiện ích.
 
Back
Bên trên