Program terminated with signal 6, Aborted,有可能啥原因呢?

  Program terminated with signal 6, Aborted,有可能啥原因呢?其中一种原因就是事实上的OOM(虽然/var/log/message中没有标明操作系统kill了进行,应该是进程内部初始化已申请内存时报错了,因为malloc的申请会被OS尽可能延后的分配,所以很有可能已经申请的内存早就OOM了,但是程序还可以运行一段时间,甚至很久,除非设置了lock in memory,比如jdk和oracle、mysql都支持这么做)

  

  abort() sends the calling process the SIGABRT signal, this is how abort() basically works.

  abort() is usually called by library functions which detect an internal error or some seriously broken constraint. For example malloc() will call abort() if its internal structures are damaged by a heap overflow.

  in most cases SIGABRT was sent by libc trying to call free() on a non-initialized/corrupted pointer

  It usually happens when there is a problem with memory allocation.

 

  SIGABRT is commonly used by libc and other libraries to abort the program in case of critical errors. For example, glibc sends an SIGABRT in case of a detected double-free or other heap corruptions.

  Also, most assert implementations make use of SIGABRT in case of a failed assert. 如“json_object_array_length: Assertion `json_object_get_type(jso) == json_type_array' failed.”

  Furthermore, SIGABRT can be sent from any other process like any other signal. Of course, the sending process needs to run as same user or root.

参考:https://stackoverflow.com/questions/3413166/when-does-a-process-get-sigabrt-signal-6

 

posted @   zhjh256  阅读(10882)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2016-08-04 线上mysql内存持续增长直至内存溢出被killed分析(已解决)
点击右上角即可分享
微信分享提示