JVM 所使用的信号

信号的类型为异常、错误、中断和控制。

表 1 显示了 JVM 所使用的信号。表中按类型或使用情况对信号进行了分组,如下所示:
异常
无论何时出现无法恢复的情况,操作系统都会同步发出一个相应的异常信号。
错误
如果 JVM 检测到不能从中恢复的情形,它会发出 SIGABRT
中断
将从 JVM 进程外部异步发出中断信号以请求关闭。
控制
JJVM 为控制目的而使用的其他信号。
表 1. JVM 所使用的信号
信号名称 信号类型 描述 是否被 -Xrs 禁用 是否被 -Xrs:sync 禁用
SIGBUS (7) 异常 访问内存不正确(数据未对准)
SIGSEGV (11) 异常 访问内存不正确(写到不可访问的内存)
SIGILL (4) 异常 非法指令(尝试调用未知的机器指令)
SIGFPE (8) 异常 浮点异常(除数为零)
SIGABRT (6) 错误 异常终止。无论何时检测到 JVM 错误,JVM 都发出该信号。
SIGINT (2) 中断 交互式注意信号(CTRL-C)。JVM 正常退出。
SIGTERM (15) 中断 终止请求。JVM 将正常退出。
SIGHUP (1) 中断 挂起。JVM 正常退出。
SIGQUIT (3) 控制 终端的退出信号。缺省情况下,这将触发 Javadump。
SIGTRAP(5) 控制 由 JIT 使用。
SIGRTMIN (32) 控制 由 JVM 用于内部控制目的。
SIGRTMAX (64) 控制 由 SDK 使用。
SIGCHLD (17) 控制 由 SDK 用于内部控制。
注: 信号名称后提供的数字是该信号的标准数值。

使用 -Xrs(减少信号使用)选项来防止 JVM 处理大多数的信号。有关更多信息,请参阅 Oracle 的 Java™ 应用程序启动程序页面

JVM 线程上的信号 1(SIGHUP)2(SIGINT)4(SIGILL)7(SIGBUS)8(SIGFPE)11(SIGSEGV)15(SIGTERM)导致 JVM 关闭;因此,应用程序信号处理程序不应该尝试从这些信号恢复,除非它不再需要 JVM。