2011-08-20 38 views
0

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

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

回答

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 
0

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