如何优雅地停止java进程?

如何在Linux和Windows中优雅地停止Java进程?

何时Runtime.getRuntime().addShutdownHook被召唤,什么时候不召唤?

终结者怎么样,他们在这里有帮助吗?

我可以从shell向Java进程发送某种信号吗?

我正在寻找最好的便携式解决方案。


慕的地8271018
浏览 813回答 3
3回答

慕神8447489

在未强制终止VM的所有情况下,执行关闭挂钩。因此,如果您要发出“标准”kill(SIGTERM来自kill命令),那么它们将执行。同样,他们会在打电话后执行System.exit(int)。然而,硬杀(kill -9或kill -SIGKILL)然后他们将不会执行。同样(显然)如果你从计算机上取下电源,将它放入一桶沸腾的熔岩中,或者用大锤将CPU打成碎片,它们就不会执行。不过你可能已经知道了。终结器确实应该运行,但最好不要依赖它来进行关机清理,而是依靠你的关闭钩子来干净地停止事情。并且,一如既往,小心死锁(我已经看到太多的关机挂钩挂起整个过程)!

慕莱坞森

另一种方式:您的应用程序可以打开服务器socet并等待到达它的信息。例如,一个带有“魔术”单词的字符串:)然后做出反应以进行关闭:System.exit()。您可以使用telnet等外部应用程序将此类信息发送到socke。
打开App,查看更多内容
随时随地看视频慕课网APP