关闭生成的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
在类似的情况下,我实现了心跳机制,父进程必须定期发送心跳。如果没有发生这种情况,子进程将自动关闭。在类似的情况下,我实现了心跳机制,父进程必须定期发送心跳。如果没有发生这种情况,子进程将自动关闭。但这适用于整个系统的关闭。虽然它在大多数情况下都能工作,但理想的情况是它能在继承的进程上工作。不过这适用于整个系统的关闭。虽然它在大多数情况下都能工作,但如果它在继承的过程中工作,那么理想的情况是。