我们正在就此事进行内部辩论。在RHEL上运行jboss 7。我们现在有一个脚本可以通过简单地在java进程上运行kill -9来停止服务器。
我的建议是使用适当的jboss命令关闭:
jboss-cli --connect --commands=:shutdown我们如何确保jboss从杀戮中优雅地关闭?我正在推动使用jboss命令。
发布于 2018-03-29 17:26:50
如果该软件是非琐碎的,并附带有文档记录的关闭它的方法,就像这里的情况一样,不管是什么,都可以。(可能有多种选择。)
具体来说,关于SIGKILL (信号9),它没有任何优雅之处。
目标进程不能拦截和处理这个信号;它只是在没有完成它正在做的事情或在关闭之前做任何通常的清理工作而被立即终止。
至于信号,如果目标是某种形式的优雅关闭,那么看看软件是如何处理SIGTERM和/或SIGINT的。软件至少有可能考虑到这些因素,并优雅地关闭。
当优雅地关闭服务不起作用时,SIGKILL应该被视为最后的手段。
发布于 2018-03-29 17:26:41
假设每把枪都上膛了,而每个应用程序都是signal 9 unsafe。假设否则,您很可能会浪费大量时间来调试偶尔出现的故障,原因很简单,比如在日志文件旋转期间发出的强制关机。
作为signal 9 safe意味着将状态更改限制在原子事务上,很少有有状态的应用程序真正做到这一点。
在java世界中,您将不会偶然地杀死一些卡住了的东西。但是,关闭应用程序的主要方法应该是优雅的方法,而通过该方法关闭的ever<失败至少应该得到与软件堆栈中任何其他错误相同的检查。
发布于 2018-03-31 04:36:38
根据官方的RedHat文档,信号SIGHUP,SIGINT和SIGTERM触发优雅关闭。SIGKILL (杀-9)不会。
https://serverfault.com/questions/905231
复制相似问题