在內核中如何處理信號(中斷)機制?我爲什麼要問的原因是:不知何故SIGABRT信號被我的應用程序接收到,我想找出來自哪裏。在內核中發送或處理linux信號的地方?
0
A
回答
6
1
cnicutar的回答是最好的猜測恕我直言。
該信號可能是由另一個進程發出的,儘管在SIGBART的情況下,它很可能是由通過abort(3)
libc函數接收它的相同進程發出的。
不能確定,您可以使用strace -e kill yourapp you args ...
來運行您的應用程序,以快速檢查kill
系統調用是否確實是從程序庫或相關庫中調用的。或使用gdb catch syscall
。
請注意,在臭名昭着的「OOM殺手」開始實施時,某些情況下內核本身可能會發出信號,例如SIGKILL
。
順便說一句,信號是異步傳遞的,它們擾亂了程序的正常工作流程。這就是爲什麼他們很難追查。除了SystemTap之類的機器外,我不知道如何跟蹤或記錄內核中的信號發射和傳輸。
相關問題
- 1. linux內核中的單處理器上的信號量
- 2. 內核空間中的信號處理
- 3. Linux內核中用於信號處理的棧幀
- 4. 推遲在Linux中的信號處理
- 5. 在Linux內核中實現硬件時鐘信號內核
- 6. Erlang Linux信號處理
- 7. C Linux信號處理
- 8. UNIX/Linux信號處理:SIGEV_THREAD
- 9. 在linux內核中的tcp處理後的數據包處理
- 10. 發送信號從命令行處理
- 11. 在Linux內核中處理SIGKILL的最佳方式
- 12. 在linux中鏈接信號處理程序的正確方法?
- 13. TASK_UNINTERRUPTIBLE和在Linux內核開發中使用C處理線程
- 14. PCIe中斷處理linux內核
- 15. Linux內核處理低內存條件
- 16. 發送USR2信號後忽略信號處理程序
- 17. Linux內核如何獲取有關處理器和內核的信息?
- 18. 檢測信號的發送者(linux,ptrace)
- 19. 在Linux內核中創建您自己的自定義信號
- 20. 更好地處理Linux內核分組的路由選擇
- 21. Linux內核3.9 KVM for ARM處理器
- 22. 從Linux內核發送UDP數據包
- 23. 在Linux內核中處理TLB未命中的調用圖
- 24. 通過PIPE發送Unix/Linux信號
- 25. Linux內核編程:「無法處理內核NULL指針引用」
- 26. 信號不能產生核心轉儲信號處理器
- 27. linux內核開發
- 28. 如何處理ASID的情況在Linux內核中用完了?
- 29. 在Android/Linux內核中處理殺掉的進程。
- 30. 在發送信號後處理()EventWaitHandle是否安全?
'abort'同步發送信號。所有你需要的是一個核心轉儲或者在調試器下運行以準確找到它被調用的位置。 – Nemo