如何在Linux和Windows中优雅地停止Java进程?何时Runtime.getRuntime().addShutdownHook被召唤,什么时候不召唤?终结者怎么样,他们在这里有帮助吗?我可以从shell向Java进程发送某种信号吗?我正在寻找最好的便携式解决方案。
3 回答
慕神8447489
TA贡献1780条经验 获得超1个赞
在未强制终止VM的所有情况下,执行关闭挂钩。因此,如果您要发出“标准”kill(SIGTERM
来自kill命令),那么它们将执行。同样,他们会在打电话后执行System.exit(int)
。
然而,硬杀(kill -9
或kill -SIGKILL
)然后他们将不会执行。同样(显然)如果你从计算机上取下电源,将它放入一桶沸腾的熔岩中,或者用大锤将CPU打成碎片,它们就不会执行。不过你可能已经知道了。
终结器确实应该运行,但最好不要依赖它来进行关机清理,而是依靠你的关闭钩子来干净地停止事情。并且,一如既往,小心死锁(我已经看到太多的关机挂钩挂起整个过程)!
慕莱坞森
TA贡献1810条经验 获得超4个赞
另一种方式:您的应用程序可以打开服务器socet并等待到达它的信息。例如,一个带有“魔术”单词的字符串:)然后做出反应以进行关闭:System.exit()。您可以使用telnet等外部应用程序将此类信息发送到socke。
添加回答
举报
0/150
提交
取消