将SIGTERM发送到JVM是否安全

虽然JVM会将SIGTERM和类似信号转换为关闭挂钩 ,但许多服务关闭脚本使用TCP端口启动关闭。 (例如Tomcat的关闭端口, Java Service Wrapper ,JBoss的管理接口等)

所以我认为使用信号和关机钩子来优雅地关闭java服务是不鼓励的,直到我发现Play! 框架是使用关闭挂钩管理服务生命周期, play dist生成的启动脚本假定信号将被发送到JVM的PID。

我知道信号是依赖于平台的,并且使用TCP端口是一种以跨平台方式管理服务的简单且可扩展的方式,但我想知道它是多么安全以及我需要考虑哪些风险,当我依赖时在SIGTERM和关闭挂钩上作为服务关闭的主要方法。

只要Java服务明智地使用ShutdownHooks进行有序终止,将SIGTERM发送到JVM进程就没有问题。 例如,我们使用SIGTERM作为在我们的大型高负载生产系统(运行80个不同Java应用程序的5000多台服务器)中启动应用程序关闭的主要方法。