退出时,我可以让JVM终止已启动的进程吗?

时间:2012-02-01 17:12:06

标签: java process

我刚刚意识到,当JVM退出时,我启动的所有进程都不会消亡。有没有办法让我用JVM退出关闭Process,有点像File.deleteOnExit()

2 个答案:

答案 0 :(得分:1)

在退出之前,您应该在每个.waitFor()上调用Process方法。

如果您无法控制该流程,可以使用Runtime.addShutdownHook()

final Process process = startNewProcess();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    @Override
    public void run() {
        process.waitFor();
    }
}));
但是,如果可能的话,我真的不推荐后一种解决方案。如果JVM没有机会自我清理,那么如果被强行杀死,该进程仍将继续运行。

答案 1 :(得分:0)

您可以保留所有正在运行的进程的列表,然后使用Process.destroy()在像Platinum Azure提到的关闭挂钩中关闭它们。

您还需要在流程完成后清理列表。如果您的代码已经调用了process.waitFor(),那么可以清理列表。

destroy方法强制关闭进程,可能会破坏它正在做的任何事情,所以你应该小心使用它。

如果你控制其他进程,然后发信号通知它关闭然后等待它完成,那么建议调用destroy。