以下是我用来简单地从命令行程序打开和关闭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'。
我的问题是:
感谢您阅读,
答案 0 :(得分:7)
实际上,那是两个问题: - )
几乎可以肯定的是,IE本身捕获了外部关闭并决定返回错误代码的事实(见下文2)。所以不,JVM不会将p1.destroy()
视为特例,但受影响的流程可能会。{/ p>
退出值是特定于流程的,而不是特定于JVM的(甚至不是特定于操作系统的)。换句话说,进程本身返回一个值以用作退出值。当您想到有办法破坏不涉及JVM的进程时,这是有道理的。
我应该提一下,在某些情况下,进程不会影响退出代码。在某些类UNIX操作系统下,如果由于某些严重故障(例如分段违规或暴力外部关闭)而导致进程退出,则操作系统可以将退出代码设置为指示此值的值。从记忆中,它是128加上信号编号。