我刚刚意识到,当JVM退出时,我启动的所有进程都不会消亡。有没有办法让我用JVM退出关闭Process
,有点像File.deleteOnExit()
?
答案 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。