Runtime.exec被System.exit杀死?

时间:2012-05-11 18:57:22

标签: java runtime.exec system.exit

我有一个应该运行bat文件的java程序,然后以成功代码0退出。

代码基本上看起来像这样

Runtime.exec(....);

System.exit(0);

99.8%的时间,这完美无缺。但非常零星的蝙蝠文件将无法运行。

我的理论是,在某些系统上,Runtime.exec无法在System.exit运行之前完成其生成。这可能/可能吗?

我查看了Runtime.exec的源代码,但它会删除本机代码以执行有趣的操作。

修改

基于到目前为止的答案,我应该声明.bat文件使用javaw执行另一个java进程。我可以确认第一个java进程结束并没有杀死bat文件中的第二个进程。

当问题发生时,bat文件是否可能在System.exit发生之前没有产生第二个java进程?也许它毕竟不是Runtime.exec的问题?

EDIT2

我不能等待第二个进程结束,它可以无限期地运行,我的第一个进程必须退出。

5 个答案:

答案 0 :(得分:1)

尝试更改为ProcessBuilder。也许它效果更好。

答案 1 :(得分:1)

您正在创建将以其父级终止的子进程。您必须在Java中使用Process.waitFor以确保Java进程等待bat进程完成。

答案 2 :(得分:0)

System.exit(0)杀死jvm实例。所有流程都将终止。如果你想真正执行System.exit(0),请确保在调用System.exit之前完成exec进程。

答案 3 :(得分:0)

使用 Process.waitFor(),此方法的返回类型为int,它根据您当前使用Runtime的解决方案提供返回代码。
waitFor()使当前线程在必要时等待,直到此Process对象表示的进程终止。

答案 4 :(得分:0)

将其更改为

Runtime.getRuntime().exec(....).waitFor();

System.exit(0);

但是,这将等待批处理文件完成执行,并在您的情况下完成javaw实例。