2016-04-26 86 views
2

我想禁用按CTRL_C发送的信号,如SIGINT,以及其他会终止JVM的信号。我读到-Xrs选项这里关于JVM信号处理

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上。 有何建议?

+0

分离从控制台的Java进程你为什么要这么做?我怀疑不可能做到正确 - 例如,SIGKILL不能简单地被捕获和忽略 - 它会*导致进程终止,除非它在不中断的睡眠中,无论是哪种方式进程不会做任何有用的事情收到SIGKILL后。 – sisyphus

+0

修复措词,标记 – fluter

回答

1

为Xrs的文档说

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

这意味着JVM只安装较少的自己的信号处理程序。较少的信号处理程序意味着更多的信号通过它们的default action处理。在很多情况下会导致进程终止。

信号可以通过signal mask抑制,通过signal handler或各种其他方式处理。

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

或者,如果你主要关心的Ctrl + C键和其他按键操作,并没有真正的信号本身就可以通过nohup java -jar ... > /dev/null &