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

在類似的情況下,我實現了一個心跳機制,其中父進程必須定期發送心跳。如果沒有發生,孩子進程會自行關閉。