gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:44:22 24 4
gpt4 key购买 nike

在未处理的异常期间,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com