内核中如何处理信号(中断)机制?我问的原因是:不知何故,我的应用程序收到了一个 SIGABRT 信号,我想知道它是从哪里来的。
问问题
748 次
2 回答
1
cnicutar 的回答是恕我直言的最佳猜测。
abort(3)
信号可能是由另一个进程发出的,尽管在 SIGBART 的情况下,它很可能是由通过libc 函数接收它的同一个进程发出的。
有疑问,您可以运行您的应用程序strace -e kill yourapp you args ...
以快速检查该kill
系统调用是否确实是从您的程序或依赖库中调用的。或使用 gdb catch syscall
。
请注意,在某些情况下,内核本身可以发出信号,例如SIGKILL
当臭名昭著的“OOM 杀手”开始行动时。
顺便说一句,信号是异步传递的,它们会破坏程序的正常工作流程。这就是为什么他们很难追踪。除了诸如 SystemTap 之类的机器之外,我不知道如何在内核中跟踪或记录信号的发射和传递。
于 2011-07-13T21:33:25.260 回答