2013-02-13 29 views
8

Quá trình có cuộc gọi 'ngã ba' sau khi xử lý tín hiệu đã được đăng ký [đối với SIGINT]. điều gì sẽ xảy ra khi SIGINT được gửi thông qua dòng lệnh? cho dù cha mẹ được thoát hoặc con hoặc cả hai? cha mẹ và con cả hai đang chạy vô hạn trong khi vòng lặp.hành vi của cha mẹ và con đối với bộ xử lý tín hiệu

Trả lời

12

Nếu bạn làm fork (không cần thêm exec*) sau khi xử lý tín hiệu đã được đăng ký, trình xử lý tín hiệu tương tự sẽ được sử dụng trong quy trình cha và con. Tức là, nếu bạn làm điều gì đó khác với số exit trong bộ xử lý SIGINT của bạn, cả cha mẹ lẫn con sẽ không thoát ra (cách SIGINT được gửi không liên quan ở đây).

Nếu bạn có nghĩa là một SIGINT gửi từ terminal (bởi vintr nhân vật mà thường là Ctrl+C): nó sẽ được nhận bởi các quá trình sử dụng các thiết bị đầu cuối như kiểm soát thiết bị đầu cuối. Tức là, trừ khi bạn tách con hoặc cha mẹ khỏi thiết bị đầu cuối điều khiển, cả hai sẽ phản ứng với Ctrl+C bằng cách gọi trình xử lý SIGINT của bạn.

+0

Nhưng trình xử lý tín hiệu được đăng ký trước ngã ba(), vì vậy trẻ không nên có bản sao. Sau ngã ba() đứa trẻ nên thực hiện các câu lệnh sau ngã ba(). đăng ký trình xử lý tín hiệu sẽ chỉ có trong phụ huynh. – Puneet

+4

@Puneet Nó * được thừa kế bởi đứa trẻ, bất kể bạn nghĩ gì về nó * nên *. Xem 'man sigaction'. Có gì kỳ lạ về nó? Các bộ mô tả tệp được mở trước khi 'fork' được thừa kế. Điều duy nhất đặc biệt về các tín hiệu là các trình xử lý không mặc định, không bỏ qua * được đặt lại trên 'execve' & friends (vì địa chỉ của trình xử lý không có ý nghĩa gì trong tệp thực thi mới), nhưng không có gì xảy ra trên' fork'. –

+0

Cảm ơn bạn ... nghi ngờ đã xóa ... – Puneet

Các vấn đề liên quan