Estoy investigando un problema de Java (utilizando IBM JVM 1.4.2 de 64 bits) en Red Hat Linux. Me pregunto si alguien ha visto este mensaje de error antes y sabe si hay una solución a este problema.Error de Java: java.lang.IllegalArgumentException: Señal ya utilizada por VM: INT
Fuente:
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);
}
}
Salida:
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
Información adicional:
descubrí algo extraño. La razón por la que falla es porque estoy ejecutando el programa dentro de un script de shell como proceso en segundo plano.
es decir sigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
Si corro el programa desde la línea de comandos, o quite la "&" (es decir, lo convierten en un proceso en primer plano dentro de la secuencia de comandos shell), no lo hace tiene un problema ... No entiendo por qué este es el caso.
Jin, dado su comentario sobre mi respuesta, la JVM no le permite registrar un enlace en este evento. ¿Puedes describir más sobre lo que estás tratando de lograr? Tal vez haya una forma de hacerlo que esté más en sintonía con las expectativas de la JVM. – Yishai
Quiero que el programa salga con gracia ejecutando un código de "limpieza" si se interrumpe. –
El problema era específico de JVM. Atribuí la recompensa a Jitter, ya que su respuesta incluía "implementación específica de JVM" y proporcionó la mayoría de las herramientas para diagnosticar mi problema. Gracias a todos. –