为什么JVM返回退出状态码143?

12

一款在Windows 2003上作为定时任务运行的Java应用程序崩溃了,没有任何日志或其他可以帮助找出问题原因的信息。仅有的可用信息是应用程序返回代码143(8F)。此错误代码从计划任务日志中检索到。

有人知道这个错误代码(143)代表什么吗?用户注销是否可能导致应用程序被终止?

谢谢,

3个回答

13

6
JVM错误代码143表示内部字段必须有效。这在OTN讨论论坛上有讨论。然而,结论似乎是某些东西杀死了您的进程。
我怀疑这可能确实是由用户注销引起的。

1
你指出的那个参考资料是针对Java ME的。我认为它与OP的问题无关,OP的问题(肯定)是关于Java SE应用程序的。 - Stephen C
是的,实际上这个引用是无意义的。不过,我认为可能是一个进程杀死了Java应用程序(可能是注销)。然而,我无法复制这个问题。 - jmend
1
实际上,过了一段时间我们发现这是一个防病毒软件。 - jmend

3
一个用户注销会向所有正在运行的进程发送CTRL_LOGOFF_EVENT信号。来自https://msdn.microsoft.com/en-us/library/windows/desktop/aa376876(v=vs.85).aspx

在注销操作期间,系统还会向每个进程发送CTRL_LOGOFF_EVENT控制信号。

在某些情况下,它将以错误代码143 (SIGTERM)终止Java应用程序。请参见https://bugs.openjdk.java.net/browse/JDK-6871190
无论如何,要防止这种情况发生,您需要使用-Xrs选项启动Java。来自https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.win.80.doc/diag/appendixes/cmdline/Xrs.html

设置-Xrs可以防止Java™运行时环境处理任何内部或外部生成的信号,例如SIGSEGV和SIGABRT。

因此,您应该使用以下内容启动Java应用程序:
>java -Xrs -jar myapplication.jar

PS:

SIGTERM143之间的关系在https://unix.stackexchange.com/questions/10231/when-does-the-system-send-a-sigterm-to-a-process#comment13523_10231中有解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接