java - 在未处理的异常期间,JVM 会发出什么信号?

标签 java unix signals

在未处理的异常期间,JVM 会引发什么信号(SIGTERMSIGINT...)?

例如,异常可能是java.lang.NumberFormatException

最佳答案

未处理的异常不一定会导致 JVM 发出信号 - 这不是必需的:异常由 Java 系统代码捕获并在那里进行处理(例如打印堆栈跟踪并退出)。

在某些情况下,JVM 可能会发出信号以调用信号处理程序来记录进一步的诊断信息。

另一方面,Oracle JVM(例如)确实安装了信号处理程序来捕获某些特定错误并将其转换为异常 - 请参阅 here了解更多详情。

编辑以跟进上述评论,并基于源链接(尽管您没有显示调用失败的 Java 程序 AFAICT 的脚本):

您安装的陷阱会导致 shell 解释器在接收到 SIGINT/... 时安装信号处理程序...如果子进程接收到这样的信号,则不会调用它们(引发会导致相关进程接收信号 - 要向另一个进程发出信号,您需要使用kill和 friend )。

因此,即使 JVM 发出信号,shell 也不会收到它。

在您的情况下可能发生的情况是 bash 配置为出错时退出(例如 set -o errexit),因此锁释放代码不会被执行,仅仅是因为 JVM 的退出代码由于未处理而不为 null异常(exception)。

要解决此问题,请将 ERR(也可能是 EXIT)添加到陷阱调用的 signal_spec 中。

关于java - 在未处理的异常期间,JVM 会发出什么信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108505/

相关文章:

Java contains() 方法返回 False,即使重写的 equals() 返回 True

c - 返回指针时出现段错误

python - 在 Python 中 session 终止时获取信号

c - 使用 execvp 进行输入、输出和重定向

bash - 将 stdout/stderr 重定向到多个文件

c++ - C microshell 有一个参数的段错误,但没有两个

linux - mongoDB (result= signal , code = killed , signal = ill

java - Drive SDK查询结果随机排序

java.lang.NoSuchMethodException : setHomeActionContentDescription [int]? 异常

java - Hibernate - 回滚 : org. hibernate.MappingException:未知实体