JVM:如何定义java可执行文件的退出代码?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JVM:如何定义java可执行文件的退出代码?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2859字,纯文字阅读大概需要5分钟。
内容图文
![JVM:如何定义java可执行文件的退出代码?](/upload/InfoBanner/zyjiaocheng/725/757307f2f0c3479c8f39c495f857347b.jpg)
我正在寻找java可执行文件的可能退出代码的定义:
(如何)我可以判断退出代码是执行Java进程还是VM本身?
示例:在Windows上,java -badoption返回1; java Main作为一个有效的类也可以返回1.
我可以使用任何VM选项来使退出代码更有意义吗?例如.区分两种类型的退出代码?
如果我知道退出代码不是来自我的Java进程(只返回0),那么非零退出代码是什么意思?
在Windows上,我经常看到-1和1.由于这些是通过自动错误报告工具报告的,我看不到任何错误消息.我只有退出代码,需要解释它.
退出代码是否依赖于平台?
解决方法:
退出代码的含义(一般)
ISO / IEC 9899(编程语言:C),ISO / IEC 9945(IEEE 1003,POSIX)
没有为Java / JVM专门定义的内容.这些退出代码的含义由ISO / IEC 9899(编程语言:C,例如7.20.4.3 ISO/IEC 9899:TC3的退出功能),ISO / IEC 9945(IEEE 1003,POSIX)和类似规范定义,它总是这样的:
> 0表示成功
>任何其他价值都意味着失败
shell环境(sh,bash,cmd.exe,make等)使用它来确定程序是否成功退出(0)或是否有错误(不是0).
强烈建议仅使用0表示成功.使用0以外的值进行成功的程序会给shell脚本,Makefile等的作者带来麻烦.
由单个程序来定义不同故障值的附加语义.但是,我认为-1不是一个好主意.最好的方法是使用EXIT_SUCCESS和EXIT_FAILURE,但这些定义来自< stdlib.h>在Java中没有相应的对应物. ISO / IEC 9899:2011没有描述应如何定义EXIT_FAILURE和EXIT_SUCCESS.但是,它将0定义为具有与EXIT_SUCCESS相同的语义,并且我不知道除了以下内容之外的任何其他系统,因此这是Java程序员可以假设的最好的事情:
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
因此,如果区分不同类型的故障很重要,我会使用0表示成功,1表示失败,值不同于1.一个很好的例子是grep命令.从其手册页(GNU grep):
EXIT STATUS
The exit status is 0 if selected lines are found, and 1 if not found. If an error occurred the exit status is 2. (Note: POSIX error handling code should check for ‘2’ or greater.)
我不会使用-1,因为它设置所有位,并且根据环境,-1实际上可能会意外地生成额外的虚假信息,例如声称信号被提升和相似.实际上,为了便携,退出代码应该在[0..127]范围内,除非你真的真的知道你在做什么.
例如,在大多数POSIX系统上,退出代码将被截断为8位,退出代码高于127的语义是退出是由信号引起的.
BSD
BSD试图提供更多退出代码,可在/usr/include/sysexits.h(man page)中找到.它们是这样的:
> 64:命令行使用错误
> 65:数据格式错误
> 66:无法打开输入
> 67:收件人未知
> 68:主机名未知
> 69:服务不可用
> 70:内部软件错误
> 71:系统错误(即不能分叉)
> 72:缺少关键操作系统文件
> 73:无法创建(用户)输出文件
> 74:输入/输出错误
> 75:临时失败;邀请用户重试
> 76:协议中的远程错误
> 77:许可被拒绝
> 78:配置错误
在没有任何其他有意义的标准的情况下,我认为我们能做的最好的事情就是使用它们.
解释JVM生成的退出值
POSIX上的JVM
在UNIX上,您可以通过从退出值中屏蔽低7位(减去128)来获取信号,在大多数shell中可以使用$?查询.
> SIGTERM – > VM:143 SIGTERM
> SIGSEGV – > VM:134 SIGABRT(因为VM处理SIGSEGV以写入hs_err文件,然后调用abort()).
与“正常”计划的比较:
> SIGSEGV – >编:139 SIGSEGV
没有为JVM显式指定此行为,它只是POSIX环境中程序的正常预期行为.鉴于JVM希望自己处理SIGSEGV,编写比普通核心文件更具体的故障转储,即使是SIGABRT也不是SIGSEGV或多或少.
Windows上的JVM
去做
内容总结
以上是互联网集市为您收集整理的JVM:如何定义java可执行文件的退出代码?全部内容,希望文章能够帮你解决JVM:如何定义java可执行文件的退出代码?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。