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

编程入门 行业动态 更新时间:2024-10-25 00:34:35
本文介绍了Java Process.exitValue()中值的含义是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

I am using Process via ProcessBuilder to run an executable made in C code. I am catching the Process.exitValue() to react on this exit values. I noticed not all the exit values are from the executable. For example, I get an exit value of 139 and nowhere in my C code I am returning an exit value of 139.

我试图找到退出值的概述,但我找不到这个,现在我发现退出值可能与操作系统有关。 (我顺便使用Ubuntu)。

I am trying to find an overview of exit values, but I cannot find this, and now I found out the exit value can be OS dependent. (I am using Ubuntu by the way).

当一切正常时,似乎唯一的退出值是0。 是否有退出值的规格?我可以确定某个范围只能用于我自己的程序吗?为操作系统保留了哪些退出代码。

It seems the only exit value to be sure of is 0 when everything goes right. Are there specifications about exit values? Can I be sure that a certain range can be used only for my own program? What exit codes are reserved for the OS.

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

I found out that 139 is probably a memory error in the C code. I want to get rid of the probably. I can't get any overview of exit values (e.g. 139 = .....)

顺便提一下,这是简化代码:

This is the simplified code by the way:

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。

Note: Running the C executable in the Ubuntu shell gives no error at all (i.e. exit value 0). But, doing the same command in Java gives exit value 139.

推荐答案

如果系统杀死了您的应用程序(例如分段错误)它将退出代码设置为128 + SIGNAL - 请参阅linux 信号(7)信息值的手册页。

If the system kills your application (like in the case of Segmentation fault) it sets the exit code to 128 + SIGNAL - see linux signal(7) manpage for signal values.

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

Also, for linux, there are several default exit codes defined in sysexits.h header file, and it is recommended that programmers use those constants instead of manually defining own values. From exit(3) manpage:

BSD试图标准化退出代码;查看文件< sysexits.h> 。

你可以找到文件,例如此处,以及值包括:

You can find the file for example here, and the values included are:

#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 */

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

However, using them is not mandatory, and you are free to use any value you want.

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

The general answer is - if your application fails gracefully (i.e. it is able to handle the error an finish execution), then it sets the exit code by itself. If the application is killed by the system, it's the system who sets the exit code.

您还可以看到此主题以获取更多信息。

You can also see this thread for some additional information.

更多推荐

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

本文发布于:2023-08-01 09:23:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267228.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:中值   含义   Java   Process   exitValue

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!