Tôi đang điều tra một vấn đề Java (sử dụng IBM JVM 1.4.2 64-bit) trên Red Hat Linux. Tôi tự hỏi nếu có ai đã nhìn thấy thông báo lỗi này trước và biết nếu có một giải pháp cho vấn đề này?Lỗi Java: java.lang.IllegalArgumentException: Tín hiệu đã được VM sử dụng: INT
Nguồn:
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);
}
}
Output:
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
Thông tin bổ sung:
tôi phát hiện ra một cái gì đó kỳ lạ. Lý do tại sao nó không thành công là vì tôi đang chạy chương trình bên trong một kịch bản lệnh vỏ làm quá trình nền.
tức sigtest.sh:
#!/bin/bash
java -cp . SignalTest >> sigtest.log 2>&1 &
Nếu tôi chạy chương trình từ dòng lệnh, hoặc loại bỏ các "&" (tức là làm cho nó một quá trình foreground bên trong shell script), nó không có vấn đề ... Tôi không hiểu tại sao lại như vậy.
Jin, đưa ra nhận xét của bạn về câu trả lời của tôi, JVM không cho phép bạn đăng ký một móc trong sự kiện này. Bạn có thể mô tả thêm về những gì bạn đang cố gắng thực hiện không? Có thể có một cách để làm điều đó đồng bộ hơn với kỳ vọng của JVM. – Yishai
Tôi muốn chương trình thoát ra một cách duyên dáng bằng cách chạy một số mã "dọn sạch" nếu nó bị gián đoạn. –
Vấn đề là JVM cụ thể. Tôi đã trao tiền thưởng cho Jitter, vì câu trả lời của ông bao gồm "triển khai JVM cụ thể" và cung cấp hầu hết các công cụ để chẩn đoán vấn đề của tôi. Cảm ơn mọi người. –