我正在开发一个网络应用程序,其中有一个客户端和服务器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()
,但无济于事。有没有人见过这样的事情?
答案 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
链接可能需要一两天才能生效,但希望情况相同的人可以关注此报告的进度并相应地解决问题。