Tôi đang viết một chương trình đa luồng nơi tôi muốn xử lý một lệnh Ctrl-C có thể từ người dùng để chấm dứt thực hiện. Theo như tôi biết không có đảm bảo rằng các chủ đề chính, mà có thể hủy bỏ tất cả các chủ đề làm việc, sẽ bắt tín hiệu. Do đó, cần thiết phải có một trình xử lý tín hiệu khác với mã của luồng làm việc sao cho bất cứ ai cũng sẽ nhận được tín hiệu nếu nó đến, hoặc có cách nào khác để thực hiện điều đó bằng việc chỉ xử lý tín hiệu trong mã của luồng chính không?bắt SIGINT trong một chương trình đa luồng
7
A
Trả lời
8
Bạn có thể chặn tín hiệu từ chuỗi cuộc gọi bằng pthread_sigmask().
Và vì các tín hiệu bị chặn được kế thừa cho các chuỗi mới tạo, bạn có thể chặn SIGINT trong chuỗi chính, sau đó khởi chạy các chủ đề khác của bạn và sau đó bỏ chặn nó trong chuỗi chính, nếu thích hợp hơn.
Các vấn đề liên quan
- 1. Chương trình máy chủ đa luồng trong Java
- 2. valgrind quầy hàng trong chương trình socket đa luồng
- 3. Không tăng tốc trong chương trình đa luồng
- 4. eclipse java chương trình đa luồng gỡ lỗi
- 5. Đa luồng - Chiến lược dọn dẹp ở cuối chương trình
- 6. Chương trình SDL/C++ OpenGL, làm thế nào để tôi ngừng SDL bắt được SIGINT
- 7. C nơi để xác định một mutex trong một chương trình đa luồng?
- 8. Bắt SIGINT trong bash, xử lý VÀ bỏ qua
- 9. Quá trình con nhận được SIGINT
- 10. PThread có phải là lựa chọn tốt cho chương trình đa luồng đa luồng C/C++ không?
- 11. Bế tắc trong một chương trình java đơn luồng
- 12. Stracing để gắn vào một quy trình đa luồng
- 13. Hệ điều hành bắt đầu quá trình giết khi quá trình python đa luồng chạy
- 14. Bỏ qua tín hiệu SIGINT trong quá trình con
- 15. đa luồng trong c trong một mmorpg
- 16. chương trình Python bắt đầu
- 17. Làm cách nào để tôi có thể lập cấu hình chương trình đa luồng bằng Python?
- 18. Đa luồng trong IronPython
- 19. timeline đồ họa tạo ra API phần mềm để lược tả một chương trình C++ đa luồng
- 20. Đa luồng trong Lua
- 21. Đa luồng trong PHP
- 22. Đa luồng trong Node.js?
- 23. Đa luồng trong LLVM
- 24. Làm cách nào để bật gỡ lỗi ngược trên chương trình đa luồng?
- 25. Lỗi đa luồng trong C#
- 26. điều khiển thứ tự xuất chậm lại đa luồng chương trình
- 27. setitimer, SIGALRM & quy trình đa luồng (linux, c)
- 28. Quá trình bắt đầu từ luồng
- 29. Lập trình OpenGL đa luồng trong Cocos2D-iPhone
- 30. jython đa luồng
nhưng cách này không phải là đi một tín hiệu sigint bị mất nếu một chủ đề con xảy ra để bắt nó và chỉ đơn giản là bỏ qua nó? – nikos
@nikos: Vâng, nhưng tôi không thấy mối quan hệ với những gì tôi đang viết; Nếu một luồng chặn một tín hiệu nó không thể, theo định nghĩa, bắt nó. – janneb
@nikos: Một tín hiệu không bao giờ được gửi tới một chuỗi bị chặn (ví dụ: sử dụng 'pthread_sigmask()') - điều này khác với chuỗi bắt và bỏ qua nó. Nếu tất cả các luồng luồng chủ đề chính có 'SIGINT' bị chặn thì nó sẽ luôn được gửi đến luồng chính. – caf