ProcessBuilder.start()导致主机JVM退出

时间:2012-01-18 19:20:28

标签: java exec processbuilder

我正在开发一个网络应用程序,其中有一个客户端和服务器JVM,它们都应该依赖于相同的jar集合,这些jar可能存储也可能不存储在同一位置。连接到服务器后,客户端立即将其罐子的MD5总和与服务器上的罐子进行比较。如果MD5总和不匹配,客户端会将服务器的jar下载到新文件夹中,并尝试生成不依赖于客户端当前使用的任何jar的新Process,然后退出。然后,这个新的Process将使用客户端保存到上述新文件夹的服务器的副本覆盖客户端的jar,然后退出。

问题是,每当客户端尝试启动新进程时,客户端的JVM都会以静默方式退出。这是产生新Process的代码:

System.err.println("##### creating ProcessBuilder ...");
ProcessBuilder pb = new ProcessBuilder();

System.err.println("##### setting command line args ...");
pb.command("java","-jar","some-jar-not-used-by-the-client.jar");

System.err.print("##### starting ProcessBuilder: ");
for(String opt : pb.command()) System.err.print(opt+" ");
System.err.println();

pb.start();
System.err.println("##### Process started, exiting host process ...");

客户似乎在致电pb.start()时退出。这是我程序的控制台输出:

##### creating ProcessBuilder
##### setting command line args
##### starting ProcessBuilder: java -jar some-jar-not-used-by-the-client.jar

pb.start()之后的打印语句永远不会被调用。我已经在Java 6和Java 7中对此进行了测试,并且我也尝试使用Runtime.getRuntime().exec(),但无济于事。有没有人见过这样的事情?

3 个答案:

答案 0 :(得分:1)

我还没看过您的帖子,但请阅读When Runtime.exec() won't - JavaWorld

答案 1 :(得分:1)

可悲的是,Farmor指出的bug已经关闭

  

状态11-已关闭,不可重现,错误   优先级:4-Low

答案 2 :(得分:0)

事实证明,这是Java 1.7.0_01(在64位Windows 7企业版上运行)中的一个错误。我更新到Java 1.7.0_02,问题就消失了。我已经向Sun提交了一份错误报告,这里是报告的链接:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7131522

链接可能需要一两天才能生效,但希望情况相同的人可以关注此报告的进度并相应地解决问题。