Java中的Process.exitValue()

Java中的Process.exitValue(),java,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(

下面是我用来从命令行程序简单地打开和关闭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表示正常终止。 ()

然后我注释了p1.destroy,并没有从Java程序中关闭浏览器,而是手动关闭窗口(文件>退出)。在本例中,p1.exitValue开始返回“0”

我的问题是:

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

    事实上,这是两个问题:-)

  • 几乎可以肯定的是,IE本身捕捉到了外部关闭的事实,并决定返回错误代码(见下面的2)。因此,JVM不会将
    p1.destroy()
    视为特例,但受影响的进程可能会

  • 退出值是进程特定的,而不是JVM特定的(甚至不是操作系统特定的)。换句话说,进程本身返回一个用作退出值的值。当您考虑到有一些方法可以销毁根本不涉及JVM的进程时,这是有意义的



  • 我应该提到,在某些情况下,流程不会影响退出代码。在某些类似UNIX的操作系统中,如果某个进程由于某些严重故障(如分段冲突或严重的外部关闭)而退出,则操作系统可能会将退出代码设置为指示此情况的值。从内存来看,它大约是128加上信号号。

    我不知道这是否是问题所在,但正如您正确指出的,值0表示正常终止。从外部终止进程(使用<代码>进程。销毁< /代码>,可能使用Win32 <代码>终止进程< /代码>)不是我认为的“正常”终止…