Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux信号在内核中发送或处理的位置?_Linux_Kernel_Signals_Abort - Fatal编程技术网

linux信号在内核中发送或处理的位置?

linux信号在内核中发送或处理的位置?,linux,kernel,signals,abort,Linux,Kernel,Signals,Abort,内核中的信令(中断)机制是如何处理的?我问这个问题的原因是:不知何故,我的应用程序收到了SIGABRT信号,我想知道这是从哪里来的 您应该在应用程序中查找原因,而不是在内核中 通常,当进程直接调用abort或assert失败时,进程会收到SIGABRT。准确地找到传递信号的内核部分将不会给您带来任何好处 总之,您的代码或代码使用的库导致了这种情况。请参阅和。cnicutar的答案是最好的猜测 信号可能是由另一个进程发出的,尽管在SIGBART的情况下,它很可能是由通过abort(3)libc函数

内核中的信令(中断)机制是如何处理的?我问这个问题的原因是:不知何故,我的应用程序收到了SIGABRT信号,我想知道这是从哪里来的

您应该在应用程序中查找原因,而不是在内核中

通常,当进程直接调用
abort
assert
失败时,进程会收到
SIGABRT
。准确地找到传递信号的内核部分将不会给您带来任何好处


总之,您的代码或代码使用的库导致了这种情况。请参阅和。

cnicutar的答案是最好的猜测

信号可能是由另一个进程发出的,尽管在SIGBART的情况下,它很可能是由通过
abort(3)
libc函数接收信号的同一进程发出的

毫无疑问,您可以使用
strace-e kill your app args…
运行应用程序,以快速检查
kill
系统调用是否确实从程序或相关库中调用。或者使用gdb
catch syscall

请注意,在某些情况下,当臭名昭著的“OOM killer”启动时,内核本身可能会发出信号,例如
SIGKILL


顺便说一句,信号是异步传递的,它们扰乱了程序的正常工作流程。这就是为什么追踪它们很痛苦。除了SystemTap之类的机器之外,我不知道如何跟踪或记录内核中的信号发射和传递。

abort
同步传递信号。您所需要的只是一个核心转储或在调试器下运行,以找到调用它的确切位置。