Shutdown优雅地生成了java子进程

时间:2011-08-20 10:29:12

标签: java process

我使用ProcessBuilder生成子进程,用于执行将一些数据写入文件系统。并且出现问题是因为父进程可能意外崩溃/死亡,子进程只是挂起,即使我使用例如jps检查其父进程是否死亡然后退出。生成的子进程检测其父进程是否已死并然后退出的正确方法是什么?

此外,在互联网上搜索后,大多数解决方案都使用Runtime.addShutdownHook(),但ProcessBuilder中未提供此解决方案。它有同等的吗?

2 个答案:

答案 0 :(得分:1)

你很好地搜索了这个问题。因此,您可能希望使用返回的Process实例引用和您提到的Runtime.addShutdownHook(Thread)方法。这是我认为你需要采取的最后一步:


List commands = new ArrayList();
commands.add("xeyes"); // launch this command
ProcessBuilder pb = new ProcessBuilder(commands);
final Process p = pb.start();
Runtime.getRuntime().addShutdownHook(new Thread() {
  @Override
  public void run() {
    p.destroy();
  }
});

Thread.sleep(2000); // sleep for some time

答案 1 :(得分:0)

在类似情况下,我实现了心跳机制,父进程必须定期发送心跳。如果没有发生这种情况,子进程就会自行关闭。

相关问题