我正在使用自定义信号处理程序来捕获自定义 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/