关闭生成的java子进程

关闭生成的java子进程,java,process,Java,Process,我使用ProcessBuilder生成一个子进程,用于执行向文件系统写入数据的操作。出现问题的原因是父进程可能意外崩溃/死亡,即使我使用了jps检查父进程是否死亡然后退出,子进程也会挂起。派生的子进程检测其父进程是否已死亡然后退出的正确方法是什么 另外,在internet上搜索后,大多数解决方案都使用Runtime.addShutdownHook(),但这在ProcessBuilder中没有提供。它有同等的吗 你对这个问题做了很好的搜索。因此,您可能希望使用返回的对进程实例的引用和您提到的Run

我使用
ProcessBuilder
生成一个子进程,用于执行向文件系统写入数据的操作。出现问题的原因是父进程可能意外崩溃/死亡,即使我使用了
jps
检查父进程是否死亡然后退出,子进程也会挂起。派生的子进程检测其父进程是否已死亡然后退出的正确方法是什么


另外,在internet上搜索后,大多数解决方案都使用
Runtime.addShutdownHook()
,但这在
ProcessBuilder
中没有提供。它有同等的吗

你对这个问题做了很好的搜索。因此,您可能希望使用返回的对
进程
实例的引用和您提到的
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

你在这个问题上搜索得很好。因此,您可能希望使用返回的对
进程
实例的引用和您提到的
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

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

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

但这适用于整个系统的关闭。虽然它在大多数情况下都能工作,但理想的情况是它能在继承的进程上工作。不过这适用于整个系统的关闭。虽然它在大多数情况下都能工作,但如果它在继承的过程中工作,那么理想的情况是。