Java-Fehlermeldung: java.lang.IllegalArgumentException: Signal bereits von VM: INT

Ich untersuche, wie sich ein Java-Problem (mit der IBM JVM 1.4.2 64-bit) auf Red Hat Linux.
Ich Frage mich, ob jemand gesehen hat, diese Fehlermeldung vor, und weiß, wenn es einen workaround zu diesem problem?

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);
    }
}

Ausgabe:

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

Zusätzliche Informationen:

Fand ich etwas seltsam.
Der Grund warum es scheitert ist, weil bei mir läuft das Programm in einem shell-Skript als Hintergrundprozess.

d.h.
sigtest.sh:

#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &

Wenn ich das Programm von der Befehlszeile aus oder entfernen Sie die "&" (D. H. ein Vordergrund-Prozess innerhalb der shell-Skript), ist es nicht ein problem haben...
Ich verstehe nicht, warum dies der Fall ist.

  • Jin, da dein Kommentar auf meine Antwort, die JVM ist nicht ausmalen, registrieren Sie einen Haken an dieses Ereignis. Können Sie beschreiben, mehr über das, was Sie versuchen zu erreichen? Vielleicht gibt es einen Weg, es zu tun, das ist mehr im Einklang mit der JVM Erwartung.
  • Ich möchten, dass das Programm ordnungsgemäß beendet werden, indem Sie einige "clean-up" - code, wenn es unterbrochen.
  • Das Problem war JVM-spezifisch. Ich erhielt das Kopfgeld von Jitter, da seine Antwort enthalten "JVM-Implementierung spezifische" gestellt und die meisten tools für die Diagnose von mein problem. Vielen Dank an alle.
InformationsquelleAutor Jin Kim | 2009-06-26
Schreibe einen Kommentar