Solaris 程序在空闲时因 SIGABRT 而崩溃

Solaris program crashes with SIGABRT when idle

我在 solaris 中的一个程序突然崩溃,在带有 SIGABRT 的日志中没有任何痕迹

以下为核心转储

threading model: multi-threaded
status: process terminated by SIGABRT (Abort)
C++ symbol demangling enabled
libc.so.1`_lwp_kill+0xa()
libc.so.1`raise+0x19()
libc.so.1`abort+0x90()
libCrun.so.1`void __Cimpl::default_terminate+9() 
libCrun.so.1`void __Cimpl::ex_terminate+0x25() 
libCrun.so.1`void __Crun::ex_throw+0x26() 
libTAO.so.2.0.7`void TAO_ORB_Core::check_shutdown+0x4c()
0x319c9a8()

代码似乎没有问题,因为进程在空闲时突然崩溃。

然后我决定查看系统日志,发现以下消息

[ID 702911 auth.error] [22216] Run idle timeout reached (32400 seconds)

知道为什么会这样吗?

由于您有未处理的异常,引发了 SIGABRT。堆栈跟踪告诉您异常来自何处:

void TAO_ORB_Core::check_shutdown()

该函数的 documentation 表示如果 ACE ORB 已关闭,它会抛出异常,这意味着程序需要终止。所以问题就变成了,为什么您的应用程序逻辑会在达到 "timeout" 时关闭 ORB?这是您需要深入研究您的应用程序才能找到的东西——我认为我们没有它的来源。