JVM 所使用的信号
信号的类型为异常、错误、中断和控制。
表 1 显示了 JVM 所使用的信号。表中按类型或使用情况对信号进行了分组,如下所示:
- 异常
- 无论何时出现无法恢复的情况,操作系统都会同步发出一个相应的异常信号。
- 错误
- 如果 JVM 检测到不能从中恢复的情形,它会发出 SIGABRT。
- 中断
- 将从 JVM 进程外部异步发出中断信号以请求关闭。
- 控制
- JJVM 为控制目的而使用的其他信号。
信号名称 | 信号类型 | 描述 | 是否被 -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。