如何在内核中处理信令(中断)机制?我问的原因是:不知怎的,我的应用程序收到了一个SIGABRT信号,我想知道它来自哪里..
答案 0 :(得分:6)
您应该在应用程序中查找原因,而不是在内核中。
通常,当流程直接调用SIGABRT
或abort
失败时,流程会收到assert
。准确地找到传递信号的内核部分将不会为您带来任何好处。
答案 1 :(得分:1)
信号可能是由另一个进程发出的,尽管在SIGBART的情况下,它很可能由通过abort(3)
libc函数接收它的相同进程发出。
有疑问,您可以使用strace -e kill yourapp you args ...
运行应用程序,以快速检查是否确实从您的程序或从属库中调用了kill
系统调用。或者使用gdb catch syscall
。
请注意,在某些情况下,当臭名昭着的“OOM杀手”开始行动时,内核本身可以发出信号,例如SIGKILL
。