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 发送信号以启动主线程的关闭?我不喜欢将我的代码绑定(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/

相关文章:

java - 无法将 List<SomeClass<SomeClass 的边界类型的子级>> 添加到 List<SomeClass<?>>

java - 使用 Java double (或其他任何东西)存储简单分数

java - 具有水平滚动的 ListView

java - JVM 中 64 位整数的效率是否比 32 位整数低?

java - 为什么finally block 执行与未捕获的异常不一致

你能解释一下这个C代码吗? (创建守护程序)

c - 带有长信号处理程序的定时器问题 (SIGALARM)

java - 如何在 Thymeleaf/HTML 中使用带有 Java + Spring 的复选框?

java - 使用 sa-jli 将 ClassDump 禁用到正在运行的 JVM 进程

Python PyQt4 发送和接收自定义信号