2010-07-14 54 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