2016-04-26 82 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 &