2010-07-14 53 views
2

我在Unix上使用Java包裝器來處理本地共享庫(JRI)。本地庫(用於R的基於C的REPL實現)在內部處理SIGINT。在Java中忽略SIGINT

殺-SIGINT PID

我寧願爲SIGINT由本地庫完全處理內部:當使用Java包裝,當我發送一個SIGINT使用過程中的Java應用程序退出。

是否有一種簡單的方法可以讓Java完全忽略SIGINT,但仍然有本地庫接收它?

增加:

最好,這將在Unix和OSX工作。

回答

7

它沒有標準API,但如果您使用的是Sun JDK,則可以使用sun.misc.Signalsun.misc.SignalHandler。 來自文檔的示例:

SignalHandler handler = new SignalHandler() { 
    public void handle(Signal sig) { 
     ... // handle SIGINT 
    } 
}; 
Signal.handle(new Signal("INT"), handler); 
+0

想知道什麼方法可以在OSX上使用它?我似乎沒有訪問sun.misc。 – Tristan 2010-07-14 21:02:48

+0

這應該適用於所有操作系統,這不是問題。 如果你沒有這些,也許你正在使用不同的JDK?看到「java -version」的輸出 – 2010-07-14 21:29:02

+0

太棒了,它的工作原理。這只是Eclipse給出了一個錯誤。 – Tristan 2010-07-14 21:42:14