我正在使用自定义信号处理程序在自定义 Java 守护程序中捕获 TERM、ABRT 和 INT 信号。我在代码中有这个处理程序,这样我就可以向它发送 TERM 信号,并通过 kill 命令优雅地关闭程序。信号处理程序现在可以正常工作,但是当我编译代码时,我收到以下警告(多次):
警告:sun.misc.SignalHandler 是 Sun 专有的 API,可能会在未来的版本中删除
在使用这些类时:
import sun.misc.SignalHandler;
import sun.misc.Signal;
是否有更好的方法向正在运行的 JVM 发送信号以启动主线程的关闭?我不喜欢将我的代码绑定(bind)到此 API,因为它可能在将来被删除。
此代码目前使用 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/5023520/