Giá trị thời gian trả về của hàm


9

Tôi đang sử dụng chức năng hết thời gian trên debian để chờ 5 giây cho tập lệnh của mình. Hoạt động tuyệt vời nhưng vấn đề tôi có là tôi cần một giá trị trả về. Giống như 1 cho thời gian chờ và 0 không có thời gian chờ Tôi sẽ làm điều này như thế nào?

Hãy xem mã của tôi:

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
# here i need the return of timeout

Khi bạn thấy Connect_script -x 'status' của tôi trả về trạng thái dưới dạng một chuỗi và in nó ra màn hình (có lẽ bạn không thể thấy điều này) Bối cảnh của vấn đề này là nếu máy chủ (đối với Connect_script) bị đóng băng thì tập lệnh không có gì . Đó là lý do tại sao tôi cần thời gian chờ xung quanh đó. Và khi hết thời gian, tôi muốn khởi động lại máy chủ. Tôi có thể làm điều đó, nhưng tôi không biết làm thế nào tôi có thể xem liệu nó có hết thời gian hay không ...

Câu trả lời:


19

Nếu timeouthết thời gian, nó thoát với trạng thái 124 ; bạn có thể kiểm tra điều này để xác định xem tập lệnh đã hết thời gian hay chưa.


Vâng cảm ơn. Tôi nhớ điều này trong hướng dẫn. @Christopher gửi câu trả lời phù hợp với tôi. Tôi không biết $? cú pháp. Vì vậy, cả hai câu trả lời của bạn là đúng;)
Zero,

6

Theo hướng dẫn ( man timeout):

Hết thời gian tóm tắt [TÙY CHỌN] SỐ [SUFFIX] LỰA CHỌN [ARG] ...

[...] Nếu lệnh hết thời gian, sau đó thoát với trạng thái 124. Nếu không, hãy thoát với trạng thái LỆNH

Kết hợp điều này với kiến ​​thức rằng trạng thái thoát hoặc giá trị trả về được lưu trữ trong biến $?và chúng ta có ...

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
RETVAL=$?

Sau đó, bạn có thể xử lý nhiều hơn dựa trên giá trị của $RETVAL, sẽ là 124 nếu hết thời gian hoặc một số giá trị khác dựa trên trạng thái thoát của connect_script.


1

Giá trị trả về timeoutphụ thuộc vào tín hiệu bạn sử dụng để chấm dứt con.

SIGTERM trả về 124:

timeout -s SIGTERM 1 sleep 2; echo $?

Nhưng SIGKILLtrả về 137:

timeout -s SIGKILL 1 sleep 2; echo $?

Xem trang hướng dẫn:

Nếu lệnh hết thời gian và trạng thái --preserve không được đặt, sau đó thoát với trạng thái 124. Nếu không, hãy thoát với trạng thái LỰA CHỌN. Nếu không có tín hiệu nào được chỉ định, hãy gửi tín hiệu HẠN khi hết thời gian. Tín hiệu TERM giết chết mọi quá trình không chặn hoặc bắt tín hiệu đó. Có thể cần phải sử dụng tín hiệu KILL (9), vì tín hiệu này không thể bị bắt, trong trường hợp đó, trạng thái thoát là 128 + 9 thay vì 124.

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.