2016-04-26 7 views
2

Ich möchte Signale wie SIGINT deaktivieren, die durch Drücken von CTRL_C gesendet wird, und auch andere Signale, die JVM beendet. Ich las über -Xrs Option hierIn Bezug auf JVM-Signalverarbeitung

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html?cm_mc_uid=30731201786714525992590&cm_mc_sid_50200000=1461656557

Aber es scheint keine Auswirkungen auf die JVM/Prozessbeendigung zu haben. Ich startete das Programm jar wie java -Xrs -jar avoid-signals.jar.
Ich bin auf Linux. Irgendwelche Vorschläge?

+0

Warum wollen Sie das tun lösen kann? Ich vermute, dass es nicht möglich ist, es richtig zu machen - SIGKILL zum Beispiel kann nicht einfach gefangen und ignoriert werden - es * wird * den Prozess beenden, es sei denn, es ist in unterbrechungsfreiem Schlaf, so oder so wird der Prozess nichts nützliches tun nach Erhalt einer SIGKILL. – sisyphus

+0

fixe Formulierungen, Marker – fluter

Antwort

1

Die Dokumentation für Xrs sagt

Reduziert die Verwendung von Betriebssystem-Signale, die von der Java VM.

Das bedeutet, dass die JVM nur weniger eigene Signalhandler installiert. Weniger Signalhandler bedeuten einfach, dass mehr Signale über ihre default action behandelt werden. Dies führt in vielen Fällen zu einer Beendigung des Prozesses.

Signale können entweder durch eine signal mask unterdrückt werden, verarbeitet durch eine signal handler oder verschiedene andere Mittel.

Derzeit bietet das JDK keine öffentlichen APIs, aber Sie können entweder interne, nicht unterstützte (sun.misc.SignalHandler) oder jnr-posix verwenden.

Oder wenn Sie meist über Ctrl + C und andere Tastenanschläge sorgen und nicht wirklich die Signale selbst Sie den Java-Prozess von der Konsole über nohup java -jar ... > /dev/null &