Câu hỏi này đã có câu trả lời ở đây:
- Lệnh Bash Run trong thời gian nhất định? 3 câu trả lời
Có thể chạy tập lệnh từ bash (ví dụ python) với thời gian kết thúc, nghĩa là nếu tập lệnh này chạy lâu hơn X giây, hãy chấm dứt nó?
Câu hỏi này đã có câu trả lời ở đây:
Có thể chạy tập lệnh từ bash (ví dụ python) với thời gian kết thúc, nghĩa là nếu tập lệnh này chạy lâu hơn X giây, hãy chấm dứt nó?
Câu trả lời:
Có, có thể chạy tập lệnh bash với thời gian chờ cho việc chấm dứt. Bạn có thể làm điều đó bằng cách:
Nó chạy một lệnh với giới hạn thời gian. Cú pháp chung bao gồm:
timeout signal duration command/script arguments
Ở đâu :
sgiây, tính mbằng phút, hgiờ, giờ d.Mặc định là giây, Khi bạn chỉ xác định một số. Ví dụ: bạn muốn chấm dứt tập lệnh của mình sau 2 phút, sau đó:
timeout 2m /path/to/script arg1 arg2NOTE: Tín hiệu hết thời gian mặc định là SIGTERMmột số quy trình không kết thúc. Trong trường hợp đó chúng ta cần sử dụng SIGKILLtín hiệu để giết quá trình.
timeout -s KILL 2m /path/to/script arg1 arg2
HOẶC LÀ
timeout -k 30 2m /path/to/slow-command arg1 arg2
Trong trường hợp này, thời gian chờ đầu tiên sẽ gửi SIGTERMtín hiệu sau khi hết thời gian ban đầu là 2 phút. Sau đó, đợi thêm 30 giây nữa và gửi SIGKILLcho quá trình nếu nó vẫn chạy.
timeout lệnh:Vâng, có nhiều lựa chọn thay thế hoặc cách giải quyết, Nếu vì lý do nào đó bạn không thể sử dụng timeout. Đó là :
Điều kiện sleepsau đó kill:
/path/to/script arg1 arg2 & sleep 2m ; kill $!Báo động Perl (Điều này có thể được sử dụng trong một tập lệnh liên tiếp.):
perl -e "alarm 120; exec @ARGV" "/path/to/script arg1 arg2"Sử dụng lệnh mong đợi :
time_out=120
command="/path/to/script arg1 arg2"
expect -c " set echo \"-noecho\";
set timeout $time_out;
spawn -noecho $command;
expect timeout { exit 1 } eof { exit 0 } "Hãy thoải mái để thêm chi tiết.