加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java Process.exitValue()中值的含义是什么?

发布时间:2020-12-14 19:19:55 所属栏目:Java 来源:网络整理
导读:我通过ProcessBuilder使用Process来运行用C代码生成的可执行文件.我正在捕获Process.exitValue()以对此退出值做出反应.我注意到并非所有退出值都来自可执行文件.例如,我得到退出值139并且在我的C代码中没有任何地方返回139的退出值. 我试图找到退出值的概述,

我通过ProcessBuilder使用Process来运行用C代码生成的可执行文件.我正在捕获Process.exitValue()以对此退出值做出反应.我注意到并非所有退出值都来自可执行文件.例如,我得到退出值139并且在我的C代码中没有任何地方返回139的退出值.

我试图找到退出值的概述,但我找不到这个,现在我发现退出值可以取决于操作系统. (我顺便使用Ubuntu).

一切顺利的时候,唯一可以肯定的退出值是0.
是否有关于退出值的规范?我可以确定某个范围只能用于我自己的程序吗?为操作系统保留了哪些退出代码.

我发现139可能是C代码中的内存错误.我想摆脱可能.我无法获得退出值的任何概述(例如139 = …..)

这是简化的代码:

ProcessBuilder p = new ProcessBuilder(executableName,executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();

注意:在Ubuntu shell中运行C可执行文件根本不会产生任何错误(即退出值0).但是,在Java中执行相同的命令会退出值139.

最佳答案
如果系统杀死你的应用程序(就像分段错误一样),它会将退出代码设置为128 SIGNAL – 请参阅linux signal(7) manpage获取信号值.

另外,对于linux,sysexits.h头文件中定义了几个默认退出代码,建议程序员使用这些常量而不是手动定义自己的值.从exit(3) manpage开始:

BSD has attempted to standardize exit codes; see the file .

您可以找到该文件,例如here,其中包含的值为:

#define EX_OK           0  /* successful termination */

#define EX__BASE        64  /* base value for error messages */

#define EX_USAGE        64  /* command line usage error */
#define EX_DATAERR      65  /* data format error */
#define EX_NOINPUT      66  /* cannot open input */
#define EX_NOUSER       67  /* addressee unknown */
#define EX_NOHOST       68  /* host name unknown */
#define EX_UNAVAILABLE  69  /* service unavailable */
#define EX_SOFTWARE     70  /* internal software error */
#define EX_OSERR        71  /* system error (e.g.,can't fork) */
#define EX_OSFILE       72  /* critical OS file missing */
#define EX_CANTCREAT    73  /* can't create (user) output file */
#define EX_IOERR        74  /* input/output error */
#define EX_TEMPFAIL     75  /* temp failure; user is invited to retry */
#define EX_PROTOCOL     76  /* remote error in protocol */
#define EX_NOPERM       77  /* permission denied */
#define EX_CONFIG       78  /* configuration error */

#define EX__MAX         78  /* maximum listed value */

但是,使用它们不是强制性的,您可以自由使用任何您想要的值.

一般的答案是 – 如果你的应用程序正常失败(即它能够处理完成执行的错误),那么它自己设置退出代码.如果应用程序被系统杀死,则系统会设置退出代码.

您还可以查看this thread以获取更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读