我在Unix上使用Java包装器来创建本机共享库(JRI)。本机库(R的基于C的REPL实现)在内部处理SIGINT。使用Java包装器时,Java应用程序在使用以下命令向进程发送SIGINT时退出:
kill -SIGINT pid
我更希望SIGINT内部完全由本地库处理。
是否有一种简单的方法可以让Java完全忽略SIGINT但仍然有本机库接收它?
增加:
最好这适用于Unix和OSX。
答案 0 :(得分:7)
没有标准API,但如果您使用的是Sun JDK,则可以使用sun.misc.Signal
和sun.misc.SignalHandler
。
来自文档的示例:
SignalHandler handler = new SignalHandler () {
public void handle(Signal sig) {
... // handle SIGINT
}
};
Signal.handle(new Signal("INT"), handler);