2010-07-14 18 views
2

J'utilise un wrapper Java pour une bibliothèque partagée native sous Unix (JRI). La bibliothèque native (une implémentation REPL basée sur C pour R) gère SIGINT en interne. Lorsque vous utilisez l'emballage Java, l'application Java se ferme lorsque j'envoie un SIGINT au processus en utilisant:Ignorer SIGINT dans Java

kill -SIGINT pid

Je préfère pour le SIGINT à entièrement gérée par la bibliothèque native en interne.

Existe-t-il un moyen facile de faire en sorte que Java ignore complètement un SIGINT tout en conservant la bibliothèque native?

Addition:

De préférence, ce serait travailler sur Unix et Mac OS X.

Répondre

7

Il n'existe aucune API standard, mais si vous utilisez Sun JDK, vous pouvez utiliser sun.misc.Signal et sun.misc.SignalHandler. Exemple tiré des docs:

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

Connaissez-vous un moyen de le faire fonctionner sous OSX? Je ne semble pas avoir accès à sun.misc. – Tristan

+0

Cela devrait fonctionner sur tous les systèmes d'exploitation, ce n'est pas le problème. Si vous n'en avez pas, peut-être utilisez-vous un JDK différent? Voir la sortie de "java -version" –

+0

Great, cela fonctionne. C'était juste Eclipse qui donnait une erreur. – Tristan