【问题标题】:ProcessBuilder.start() causes host JVM to exitProcessBuilder.start() 导致主机 JVM 退出
【发布时间】: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() 之后的打印语句永远不会被调用。我已经在 J​​ava 6 和 Java 7 中对此进行了测试,并且我也尝试过使用Runtime.getRuntime().exec(),但无济于事。有没有人见过这样的东西?

【问题讨论】:

    标签: java exec processbuilder


    【解决方案1】:

    我没看过你的帖子,但看过When Runtime.exec() won't - JavaWorld

    【讨论】:

    • 是的,我之前已经通读过了——尽管这篇文章中没有一个案例与这里发生的事情有很大的相似之处。我的父进程没有挂起或转储堆栈跟踪,它在调用 ProcessBuilder.start() 后立即退出。我也没有使用 Runtime.getRuntime().exec() 因为在 Java 中生成进程的官方首选方法是使用 ProcessBuilder,根据 Java API。不过文章不错!
    【解决方案2】:

    遗憾的是,Farmor 指出的错误已被关闭

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

    【讨论】:

    • 是的,我怀疑他们可能会这样做。我认为他们认为是因为您可以通过将 Java 更新到最新版本来解决这个问题,他们只是不会在旧版本中修复它。让我有点怀疑,因为现在我必须告诉我所有的客户不要将我的软件与 Java 1.7.0_01 一起使用......哦,好吧,我猜你得到了你所支付的...... :)
    【解决方案3】:

    原来,这是 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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      相关资源
      最近更新 更多