关于 JVM 信号处理



我想禁用像SIGINT这样的信号,这是通过按CTRL_C发送的,以及其他将终止JVM的信号。我在这里阅读了有关 -Xrs 选项的信息

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html?cm_mc_uid=30731201786714525992590&cm_mc_sid_50200000=1461656557

但它似乎对 JVM/进程终止没有影响。我像java -Xrs -jar avoid-signals.jar一样启动了程序罐.
我在Linux上。有什么建议吗?

Xrs的文档说

减少 Java VM 对操作系统信号的使用。

这意味着 JVM 只安装较少的自己的信号处理程序。更少的信号处理程序仅仅意味着通过其默认操作处理更多的信号。在许多情况下,这会导致进程终止。

信号

可以通过信号掩码抑制,通过信号处理程序或其他各种方式进行处理。

目前JDK不提供公共API,但您可以使用内部的,不受支持的API(sun.misc.SignalHandler)或jnr-posix。

或者,如果您主要关心 Ctrl+C 和其他击键,而不是真正的信号本身,您可以通过 nohup java -jar ... > /dev/null & 将 java 进程与控制台分离

最新更新