Có cách nào trong Java để xử lý SIGTERM đã nhận không?Cách xử lý một SIGTERM
Trả lời
Có, bạn có thể đăng ký hook tắt máy với Runtime.addShutdownHook()
.
Bạn có thể thêm shutdown hook để thực hiện bất kỳ việc dọn dẹp nào.
Như thế này:
public class myjava{
public static void main(String[] args){
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Inside Add Shutdown Hook");
}
});
System.out.println("Shut Down Hook Attached.");
System.out.println(5/0); //Operating system sends SIGFPE to the JVM
//the JVM catches it and constructs a
//ArithmeticException class, and since you
//don't catch this with a try/catch, dumps
//it to screen and terminates. The shutdown
//hook is triggered, doing final cleanup.
}
}
Sau đó chạy nó:
[email protected]:~$ javac myjava.java
[email protected]:~$ java myjava
Shut Down Hook Attached.
Exception in thread "main" java.lang.ArithmeticException:/by zero
at myjava.main(myjava.java:11)
Inside Add Shutdown Hook
Một cách khác để xử lý tín hiệu trong Java là thông qua các gói sun.misc.signal. Tham khảo http://www.ibm.com/developerworks/java/library/i-signalhandling/ để biết cách sử dụng.
LƯU Ý: Chức năng nằm trong gói mặt trời. * Cũng có nghĩa là nó có thể không di động/hoạt động giống nhau trên tất cả các hệ điều hành. Nhưng bạn có thể muốn thử nó.
Nhưng trên thực tế, nó cũng giống nhau? –
Không - không chính xác. API xử lý tín hiệu tôi đã đề cập có thể được sử dụng để xử lý hầu hết các tín hiệu hệ điều hành gốc (bẫy, intr, kill, vv) trong Java Apps. Mặt khác ShutdownHook chỉ được gọi khi JVM cuối cùng kết thúc (sau khi nhận được tín hiệu kill). – arcamax
@arcamax liên kết dường như bị hỏng – GreenGiant
Mục nhập blog là 404 – luckydonald