Ich untersuche ein Java-Problem (mit IBM JVM 1.4.2 64-Bit) auf Red Hat Linux. Ich frage mich, ob jemand diese Fehlermeldung zuvor gesehen hat und weiß, ob es eine Problemumgehung für dieses Problem gibt?Java-Fehler: java.lang.IllegalArgumentException: Bereits von der VM verwendetes Signal: INT
Quelle:
import sun.misc.Signal;
import sun.misc.SignalHandler;
public class SignalTest extends Thread
{
private static Signal signal = new Signal("INT");
private static ShutdownHandler handler = new ShutdownHandler();
private static class ShutdownHandler implements SignalHandler
{
public void handle(Signal sig)
{
}
}
public static void main(String[] args)
{
try
{
Signal.handle(signal, handler);
}
catch(Throwable e)
{
e.printStackTrace();
}
try { Thread.sleep(5000); } catch(Exception e) { e.printStackTrace(); }
System.exit(0);
}
}
Ausgang:
java.lang.IllegalArgumentException <Signal already used by VM: INT>
java.lang.IllegalArgumentException: Signal already used by VM: INT
at
com.ibm.misc.SignalDispatcher.registerSignal(SignalDispatcher.java:145)
at sun.misc.Signal.handle(Signal.java:199)
at xxx
Weitere Informationen:
Ich fand heraus, etwas seltsam. Der Grund, warum es fehlschlägt, ist, weil ich das Programm in einem Shell-Skript als Hintergrundprozess ausführen.
dh sigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
Wenn ich das Programm von der Befehlszeile ausführen, oder entfernen Sie die „&“ (dh es ist ein Vordergrundprozess innerhalb der Shell-Skript machen), ist es nicht habe ein Problem ... Ich verstehe nicht, warum das so ist.
Jin, mit Ihrem Kommentar zu meiner Antwort, die JVM lässt Sie nicht einen Haken bei dieser Veranstaltung registrieren. Kannst du mehr darüber beschreiben, was du erreichen willst? Vielleicht gibt es einen Weg, dies zu tun, der mehr mit den Erwartungen der JVM übereinstimmt. – Yishai
Ich möchte, dass das Programm ordnungsgemäß beendet wird, indem Sie einen "Bereinigungs" -Code aufrufen, wenn dieser unterbrochen wird. –
Das Problem war JVM-spezifisch. Ich habe das Kopfgeld an Jitter vergeben, da seine Antwort "JVM implementation specific" beinhaltete und die meisten Tools zur Diagnose meines Problems zur Verfügung stellte. Danke an alle. –