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
追加情報:
何かおかしなことに気づきました。失敗する理由は、シェルスクリプト内でプログラムをバックグラウンドプロセスとして実行しているためです。
すなわちsigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
コマンドラインからプログラムを実行するか、「&」を削除する(つまり、シェルスクリプト内のフォアグラウンドプロセスにする)場合、問題はありません...なぜそうなるのかわかりません。