Cập nhật tháng năm 2012 (2 năm rưỡi sau)
Trejkaz nhận xét:
Trong các phiên bản hiện tại của mã Java xử lý tín hiệu này không thành công vì tín hiệu "INT
" được đặt trước bởi máy ảo hoặc hệ điều hành ".
Ngoài ra, không có tên tín hiệu hợp lệ nào thực sự kích hoạt khi có yêu cầu đóng ứng dụng (tôi chỉ kiểm tra cẩn thận tất cả những gì tôi có thể tìm hiểu ...)
Móc tắt hoạt động chủ yếu nhưng chúng tôi thấy rằng trường hợp của chúng tôi nó không được sa thải, vì vậy bước tiếp theo rõ ràng là phải nghỉ mát để đăng ký một handler đằng sau của JVM lại
chương "Integrating Signal and Exception Handling" của "Troubleshooting Guide for HotSpot VM" đề cập đến các tín hiệu "SIGTERM
, SIGINT
, SIGHUP
" chỉ dành cho Solaris OS và Linux.
Chỉ xử lý ngoại lệ trên Windows được đề cập.
câu trả lời
gốc (tháng 9 năm 2009)
một ShutdownHook nên có thể xử lý rằng trường hợp
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// what you want to do
}
}));
(với caveats)
Xem thêm:
như một minh hoạ của xử lý tín hiệu đơn giản:
public class Aaarggh {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("INT"), new SignalHandler() {
public void handle(Signal sig) {
System.out.println(
"Aaarggh, a user is trying to interrupt me!!");
System.out.println(
"(throw garlic at user, say `shoo, go away')");
}
});
for(int i=0; i<100; i++) {
Thread.sleep(1000);
System.out.print('.');
}
}
}
Làm thế nào để đối phó với câu hỏi SIGINT: http://stackoverflow.com/questions/2541475/capture- sigint-in-java –