Per Wikipedia,
SIGABRT
is sent by the process to itself when it calls the abort
libc function, defined in stdlib.h
. The SIGABRT
signal can be caught, but it cannot be blocked; if the signal handler returns then all open streams are closed and flushed and the program terminates (dumping core if appropriate). This means that the abort
call never returns. Because of this characteristic, it is often used to signal fatal conditions in support libraries, situations where the current operation cannot be completed but the main program can perform cleanup before exiting. It is used when an assertion fails.
That means that if your code is not calling abort
directly nor sending itself the SIGABRT
signal via raise
, and you don't have any failing assertions, the cause must be that a support library (which could be libc) has encountered an internal error. If you provide the details of your program we might be able to suggest possible causes. Even better, if you examine a core or run your program in a debugger you should be able to collect a stack trace, which will show which library caused your program to abort.
(It is also possible that another program on your system is sending your program SIGABRT
, but this is in most cases vanishingly unlikely.)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…