Sto analizzando un problema Java (utilizzando IBM JVM 1.4.2 64-bit) su Red Hat Linux. Mi chiedo se qualcuno ha già visto questo messaggio di errore e sa se c'è una soluzione a questo problema?Errore Java: java.lang.IllegalArgumentException: Segnale già utilizzato dalla VM: INT
Fonte:
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);
}
}
uscita:
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
Informazioni aggiuntive:
ho scoperto qualcosa di strano. Il motivo per cui non funziona è perché sto eseguendo il programma all'interno di uno script di shell come processo in background.
cioè sigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
Se eseguo il programma da linea di comando, o rimuovere il "&" (cioè renderlo un processo in primo piano all'interno dello script di shell), non è così avere un problema ... Non capisco perché sia così.
Jin, dato il tuo commento sulla mia risposta, la JVM non ti permette di registrarti su questo evento. Puoi descrivere di più su cosa stai cercando di realizzare? Forse c'è un modo per farlo che è più in sintonia con le aspettative della JVM. – Yishai
Voglio che il programma esca con grazia eseguendo un po 'di codice "clean up" se è stato interrotto. –
Il problema era specifico JVM. Ho assegnato il premio a Jitter, poiché la sua risposta includeva "implementazione specifica JVM" e forniva il maggior numero di strumenti per diagnosticare il mio problema. Grazie a tutti. –