【发布时间】:2012-01-18 19:20:28
【问题描述】:
我正在开发一个网络应用程序,其中有一个客户端和服务器 JVM,它们都应该依赖于一组相同的 jar,它们可能存储在同一位置,也可能不存储在同一位置。连接到服务器后,客户端立即将其 jar 的 MD5 和与服务器上的 jar 进行比较。如果 MD5 Sum 不匹配,客户端会将服务器的 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(),但无济于事。有没有人见过这样的东西?
【问题讨论】:
标签: java exec processbuilder