我使用ProcessBuilder
來產生子進程以執行將一些數據寫入文件系統。並且會出現問題,因爲父進程可能會意外崩潰/終止,即使我使用例如子進程也會掛起。 jps
檢查其父進程是否死亡然後退出。生成的子進程檢測父進程是否已經死亡然後退出的正確方法是什麼?正常關機導致java子進程
此外,在互聯網上搜索後,大多數解決方案使用Runtime.addShutdownHook()
,但這在ProcessBuilder
中未提供。它有相同的嗎?
我使用ProcessBuilder
來產生子進程以執行將一些數據寫入文件系統。並且會出現問題,因爲父進程可能會意外崩潰/終止,即使我使用例如子進程也會掛起。 jps
檢查其父進程是否死亡然後退出。生成的子進程檢測父進程是否已經死亡然後退出的正確方法是什麼?正常關機導致java子進程
此外,在互聯網上搜索後,大多數解決方案使用Runtime.addShutdownHook()
,但這在ProcessBuilder
中未提供。它有相同的嗎?
你對問題做了很好的研究。因此,您可能希望使用您提到的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
在類似的情況下,我實現了一個心跳機制,其中父進程必須定期發送心跳。如果沒有發生,孩子進程會自行關閉。