我正在调查 Red Hat Linux 上的 Java 问题(使用 IBM JVM 1.4.2 64 位)。我想知道是否有人以前看过此错误消息并知道是否有解决此问题的方法?
资源:
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);
}
}
输出:
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
附加信息:
我发现了一些奇怪的东西。它失败的原因是因为我在 shell 脚本中作为后台进程运行程序。
即sigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
如果我从命令行运行程序,或者删除“&”(即在 shell 脚本中使其成为前台进程),它没有问题......我不明白为什么会这样。