将信号发送到正在运行的JVM

jmq*_*jmq 8 java jvm signals

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

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

使用这些类时:

import sun.misc.SignalHandler;
import sun.misc.Signal;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法将信号发送到正在运行的JVM以启动主线程的关闭?我不希望将我的代码绑定到此API,以便将来删除它.

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

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

yka*_*ich 17

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

至于你的问题,我不太清楚为什么java进程处理kill信号的默认方式对你来说还不够:如何优雅地停止java进程?.如果需要添加其他逻辑,可以添加关闭挂钩.

尽管如此,如果您正在寻找其他方法让您的Java进程知道是时候退出,您可以让它监听套接字,stdin或命名管道......

您可能还想查看JVMTI

  • 这最终奏效了,我能够从项目中删除这两个类.你的建议很有帮助,谢谢. (3认同)