Tôi muốn bẫy một tín hiệu gửi từ Script-A.sh để Script-B.sh như vậy trong Script-A.sh tôi sử dụng lệnhLàm cách nào để gửi tín hiệu SIGINT từ tập lệnh đến tập lệnh? BASH
(Gửi SIGINT để Script-B.sh)
giết -2 $ PID_Script-B.sh
và trong Script-B.sh tôi bắt tín hiệu và gọi hàm sạch
bẫy 'sạch' 2
Nó không hoạt động, thay vì Script-B.sh bị giết ngay lập tức mà không thực hiện sạch !!
gì tôi nhận thấy cũng là nếu tôi muốn gửi SIGINT từ thiết bị đầu cuối cho bất kỳ kịch bản mà bẫy nó, một ctrl-c
sẽ được đánh bắt một cách chính xác, nhưng không nếu tôi xác định các tín hiệu thông qua lệnh kill -2 $pid_of_script
Bất kỳ ý tưởng về sự khác biệt giữa hai phương pháp để gửi SIGINT (ctrl-c
VS kill -2 $pid_of_script
), và làm thế nào tôi có thể gửi một SIGINT từ một kịch bản khác?
Kính trọng,
Debugger
Đó bit đầu tiên từ bash (1) có vẻ như một lời giải thích. Ngoài ra, * zsh * có vẻ hoạt động tốt. –
Xin lỗi vì câu trả lời muộn này. Bạn nói đúng, không phải tất cả các tín hiệu đều có thể bắt được cho trẻ em nhưng một số. SIGUSR1 làm việc cho tôi cũng như SIGTERM, nhưng không phải trong tất cả các phiên bản bash, gây ra tôi có một lỗi phân đoạn từ một kịch bản trong bash 3.00.16 khi cố gắng để gửi tín hiệu từ cha đến con trai !!! Lần khác sử dụng cùng một phiên bản nó sẽ chỉ bỏ qua tín hiệu mà không bắt nó (ở cấp độ trẻ em). Nhưng các phiên bản mới hơn hoạt động tốt và truyền chính xác tất cả các tín hiệu. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn – Debugger
ok. chạy scriptA shell script và gọi scriptB (nguồn nó) như "scriptB.sh param1 param2 .. paramN", theo cách đó, nó sẽ bắt sạch đối với Sig 2/INT –