Điều này có vẻ như một câu hỏi ngớ ngẩn, nhưng tôi không thể tìm thấy câu trả lời cho nó ở bất cứ nơi nào tôi nhìn. Tôi biết rằng trong UNIX, các tín hiệu được xử lý không đồng bộ. Nếu tôi viết một hàm xử lý tín hiệu, hàm đó chạy ở đâu? Chủ đề mới có sinh ra không? Chủ đề hiện tại có bị gián đoạn không? Hay điều này được xử lý trong một luồng hệ thống như I/O không đồng bộ?Các tín hiệu không đồng bộ được xử lý như thế nào trong Linux?
Trả lời
Chuỗi quy trình hiện tại bị gián đoạn cho đến khi hàm trả về. Có những hạn chế nghiêm trọng về những gì nó có thể làm một cách an toàn để đảm bảo nó không làm hỏng trạng thái của các cuộc gọi hàm mà luồng nằm ở giữa - đặc biệt, bất kỳ hàm nào mà nó gọi là luồng có thể đã được gọi phải là reentrant async. Xem trang người đàn ông, ví dụ: tín hiệu, sigaction để biết thêm chi tiết hoặc đặt câu hỏi cụ thể hơn tùy thích.
Chức năng tín hiệu được thực hiện như thể một luồng trong quy trình bị gián đoạn. Nghĩa là, trình xử lý tín hiệu được gọi bằng cách sử dụng luồng được báo hiệu và ngăn xếp được sắp xếp lại sao cho khi trình xử lý tín hiệu trả về chuỗi tiếp tục thực hiện. Không có chủ đề mới nào được giới thiệu.
Đây không phải là một chuỗi riêng biệt, nhưng mã của bạn bị treo nhanh chóng. Đó là lý do tại sao chỉ có một tập con giới hạn của các cuộc gọi POSIX.
Từ signal man page:
Việc xử lý thường xuyên phải rất cẩn thận, vì chế biến ở nơi khác bị gián đoạn tại một số điểm tùy ý. POSIX có khái niệm về "chức năng an toàn". Nếu một tín hiệu ngắt một hàm không an toàn, và trình xử lý gọi một hàm không an toàn, thì hành vi là không xác định. Các chức năng an toàn được liệt kê rõ ràng trong các tiêu chuẩn khác nhau.
- 1. Xử lý tín hiệu Erlang Linux
- 2. python xử lý tín hiệu như thế nào?
- 3. Xử lý tín hiệu với nhiều luồng trong Linux
- 4. Bộ xử lý tín hiệu SIGKILL
- 5. SIGKILL tín hiệu xử lý
- 6. Làm thế nào để làm cho bộ xử lý tín hiệu Django không âm thầm khi một ngoại lệ gặp phải trong bộ xử lý tín hiệu?
- 7. Nhận tín hiệu: Sử dụng chức năng thành viên làm bộ xử lý tín hiệu
- 8. Tăng cường :: các khe tín hiệu được gọi là đồng bộ hoặc không đồng bộ?
- 9. Xử lý tín hiệu trong C
- 10. Làm thế nào để xử lý tín hiệu SIGABRT?
- 11. XOPEN_SOURCE và xử lý tín hiệu
- 12. tín hiệu xử lý trong C++
- 13. Xcode: GDB và bộ xử lý tín hiệu
- 14. Xử lý tín hiệu bằng "TERM"
- 15. Vấn đề với xử lý tín hiệu, xử lý ngắt
- 16. Các hàm nào được tái tham gia bằng Python để xử lý thư viện tín hiệu
- 17. cách xác định số lượng tín hiệu đang chờ xử lý trong hàng đợi tín hiệu unix (Linux)
- 18. printf không hoạt động trong xử lý tín hiệu C
- 19. Các ngắt được xử lý như thế nào trên SMP?
- 20. Xử lý không đồng bộ trong C++
- 21. Điểm hủy trong trình xử lý tín hiệu?
- 22. Xử lý tín hiệu cơ bản trong C++
- 23. xử lý tín hiệu và khai thác gỗ trong Python
- 24. Làm thế nào để gỡ lỗi chương trình với bộ xử lý tín hiệu cho SIGSEGV
- 25. Xử lý tín hiệu trên Windows
- 26. Đọc dữ liệu được chia sẻ bên trong bộ xử lý tín hiệu
- 27. Xử lý tín hiệu trong chương trình song song OpenMP
- 28. Gói Python để xử lý tín hiệu
- 29. tín hiệu Xử lý với sigaction
- 30. Cách xử lý không đồng bộ?