java - 向正在运行的 JVM 发送信号

标签 java jvm signals

我正在使用自定义信号处理程序来捕获自定义 java 守护程序中的 TERM、ABRT 和 INT 信号。我在代码中有这个处理程序,以便我可以向它发送 TERM 信号并通过 Kill 命令正常关闭程序。信号处理程序现在可以工作,但是当我编译代码时,我收到以下警告(多次):

警告:sun.misc.SignalHandler 是 Sun 专有 API,可能会在未来版本中删除

使用这些类时:

import sun.misc.SignalHandler;
import sun.misc.Signal;

是否有更好的方法向正在运行的 JVM 发送信号以启动主线程的关闭?我不喜欢将我的代码与此 API 绑定(bind)在一起,因为将来可能会删除它。

此代码目前可在使用 1.5.0_22 JVM 的 Solaris 和 HPUX 上运行。任何帮助或建议将不胜感激。我使用 IBM 的这份文档来开发信号处理程序:

http://www.ibm.com/developerworks/java/library/i-signalhandling/

最佳答案

首先,请了解这只是 sun.misc 包的标准警告。他们让您知道您正在使用的 API 不是标准的 Java API。这并不意味着他们正在积极计划将来删除此 API。 http://java.sun.com/products/jdk/faq/faq-sun-packages.html

就你的问题而言,我不太清楚为什么 java 进程处理终止信号的默认方式对你来说不够: How to stop java process gracefully? 。如果需要添加额外的逻辑,可以添加 shutdown hook .

不过,如果您正在寻找其他方法让您的 java 进程知道是时候退出了,您可以让它监听套接字、标准输入或命名管道...

您可能还想查看JVMTI

关于java - 向正在运行的 JVM 发送信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12143891/

相关文章:

Java-Calculator 多计算

Java/eclipse : Why can't I run a prog with package by Run Configuration? 里面的图片

java - 从 adb shell 运行基于 android java 的命令行实用程序

java - Linux操作系统中的JVM堆参数

java - 无法创建 Java 虚拟机 - Mac OS 上的 Tomcat 服务器

matlab - 每次计算时,两个随机信号之间的相关性都会发生变化

java - 如何从 Firebase 实时数据库中获取某个键的所有值?

java - 应用程序在 Eclipse 中运行,导出的 jar 崩溃

linux - 发出信号并中断比较

c - 从捕获浮点异常返回