Java中的Process.exitValue()

时间:2011-01-30 11:49:01

标签: java

以下是我用来简单地从命令行程序打开和关闭Internet Explorer的程序。我在Windows XP操作系统上用Java 6运行我的程序:

Runtime runtime = Runtime.getRuntime();       
Process p1 = runtime.exec("C:\\Program Files\\Internet Explorer\\iexplore.exe");
Thread.sleep(5000);
p1.destroy();
Thread.sleep(2000);
System.out.println("p1.exitValue(): "+p1.exitValue())

退出值为:1。

Javadoc说:按照惯例,值0表示正常终止。 http://download.oracle.com/javase/6/docs/api/java/lang/Process.html#exitValue()

然后我评论了p1.destroy而不是从我的Java程序关闭浏览器,我手动关闭了窗口(文件>退出)。在这种情况下,p1.exitValue开始返回'0'。

我的问题是:

  1. 为什么程序在第一种情况下将退出代码返回为“1”? JVM是否将p1.destroy()视为终止程序的异常方式?
  2. 通常,“退出状态代码”值是特定于JVM还是特定于操作系统?我已经看到一些问题,人们已将退出代码值报告为“10”,“34545”等。
  3. 感谢您阅读,

1 个答案:

答案 0 :(得分:7)

实际上,那是两个问题: - )

  1. 几乎可以肯定的是,IE本身捕获了外部关闭并决定返回错误代码的事实(见下文2)。所以不,JVM不会将p1.destroy()视为特例,但受影响的流程可能会。{/ p>

  2. 退出值是特定于流程的,而不是特定于JVM的(甚至不是特定于操作系统的)。换句话说,进程本身返回一个值以用作退出值。当您想到有办法破坏不涉及JVM的进程时,这是有道理的。


  3. 我应该提一下,在某些情况下,进程不会影响退出代码。在某些类UNIX操作系统下,如果由于某些严重故障(例如分段违规或暴力外部关闭)而导致进程退出,则操作系统可以将退出代码设置为指示此值的值。从记忆中,它是128加上信号编号。