当前位置: 首页 > 面试题库 >

将SIGTERM发送到JVM是否安全?

徐经武
2023-03-14
问题内容

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

所以我认为不建议使用信号和关闭钩子来正常关闭Java服务,直到发现Play!框架通过关闭钩子管理服务生命周期,并且由生成的启动脚本play dist假定将信号发送到JVM的PID。

我知道信号是与平台相关的,并且使用TCP端口是一种以跨平台方式管理服务的简单且可扩展的方式,但是我想知道信号的安全性以及在我依赖时需要考虑的风险SIGTERM和shutdown钩子上的链接作为服务关闭的主要方法。


问题答案:

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



 类似资料:
  • 我正在从Bash脚本启动一个名为 的Java代码。Bash 脚本启动 Java 代码,然后运行 Java 代码。在Java程序结束时,我想发送一个信号回到Bash脚本以终止。请记住,Bash 脚本在 PID = 1 的情况下运行。我必须杀死PID 1过程。 我设置了bash脚本,使其在无限循环中运行,并< code >等待终止信号: 我正在使用Docker实例,信号是< code>sigterm。

  • 请想象一些子进程是由pcntl_fork()生成的,它们分别使用PDO打开mysql连接。如果父进程向子进程发送带有posix_kill()的SIGTERM信号,子进程将立即被杀死。 所以,我对此有一个疑问。当子进程终止时,它是否也会自动关闭mysql连接?或者我应该调用out()函数? 我知道如果发送了SIGKILL,子进程会保持连接。但是,我不知道SIGTERM的情况。

  • 问题内容: 我正在使用自定义信号处理程序在自定义Java守护程序中捕获TERM,ABRT和INT信号。我在代码中有此处理程序,以便可以向其发送TERM信号,并通过kill命令正常关闭程序。信号处理程序现在可以正常工作,但是当我编译代码时,我收到以下警告(很多次): 警告:sun.misc.SignalHandler是Sun专有的API,将来的发行版中可能会删除它。 在使用这些类时: 有没有更好的方

  • SIGCHLD的维基百科页面说: 当子进程退出、被中断或中断后恢复时,SIGCHLD信号被发送给子进程的父进程。 这是否意味着当父进程向子进程发送任何信号(如 )时,它将反过来接收来自子进程的 ? 或者我误解了中断(我假设它是指接收到的任何信号),在这种情况下,哪些信号是相关的?

  • 所以我对Java和Android的开发都很陌生,但我通过谷歌登录我的应用程序时,不知怎的成功地获得了一个idToken。 我在Android dev网站上读到,仅仅是ID是不安全的,因为修改过的客户端可能会发送一个假的ID并导致对另一个用户的冒充,所以我按照他们的步骤获取了用户的idToken。 不管怎么说,把一个URL发送到我家里的服务器上安全吗?例如,像这样(假设随机文本的长字符串是用户的id

  • 我有一个问题,我无法将任何参数传递到一个模态窗口(使用引导程序3),我尝试使用本链接中所述的解决方案,但我无法使其工作: 动态加载信息到Twitter引导模式 (解决方案kexxcream用户)。 我已经附上了代码(上面左边的代码帖子相同); JS代码: PHP代码(backend.PHP):