2012年5月更新(两年半后)
Trejkaz评论:
在当前版本的Java上,此信号处理代码失败,因为“
INT”信号“由VM或OS保留”。
此外,当某些东西要求关闭应用程序时,其他有效信号名称实际上都不会触发(我只是经过艰苦的测试,可以发现所有相关的信号…)
关闭钩子大多数情况下都起作用,但是我们发现在这种情况下不会触发,因此下一步显然是求助于在JVM背后注册处理程序
该章“ 积分信号和异常处理中”的“
故障排除指南HotSpot虚拟机 ”提到了“的信号
SIGTERM,
SIGINT,
SIGHUP”只适用于Solaris OS和Linux。
仅提及Windows上的异常处理。
原始答案(2009年9月)
一个ShutdownHook应该能够处理这种情况
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { public void run() { // what you want to do }}));(附带警告)
另请参阅:
- Java信号处理和终止(链接已死,请参阅存档或镜像)
- java出口信号处理:
作为简单信号处理的说明:
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('.'); } }}


