Có thể bash để chặn SIGINT không, làm điều gì đó, và sau đó bỏ qua nó (giữ bash đang chạy).Bắt SIGINT trong bash, xử lý VÀ bỏ qua
tôi biết rằng tôi có thể bỏ qua SIGINT với
trap '' SIGINT
Và tôi cũng có thể làm điều gì đó trên SIGINT với
trap handler SIGINT
Nhưng điều đó vẫn sẽ ngừng kịch bản sau khi handler
thực thi. Ví dụ.
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
Khi tôi nhấn ctrl + c, SIGINT để chương trình sẽ được gửi đi, nhưng bash sẽ bỏ qua wait
TRƯỚC chương trình đã bị đóng cửa đúng cách xuống và tạo ra sản lượng của nó trong xử lý tín hiệu của nó.
Sử dụng @suspectus câu trả lời tôi có thể thay đổi wait $PID
tới:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
Điều này thực sự làm việc cho tôi Tôi chỉ không chắc chắn 100% nếu điều này là 'sạch' hay 'workaround bẩn'.
Tại sao nó in nhiều lần? – cnicutar
@cnicutar: Nếu tôi nhấn ctrl + c nhiều lần (mà tôi không thể ở dạng hiện tại, bởi vì nó dừng sau lần đầu tiên) – Zulan
Tôi đã thay đổi ví dụ của mình để gần với trường hợp sử dụng thực tế hơn. – Zulan