是否有可能捕获Ctrl + C信号在Java命令行应用程序中?我想在终止程序之前清理一些资源。在Java中捕获Ctrl + C
58
A
回答
65
您可以将shutdown hook每当虚拟机关闭它获取运行VM:
Java虚拟机在响应关闭以两种事件:
程序当最后一个非守护进程线程退出或退出(等效地,System.exit)方法被调用时退出,或者
该virt响应于用户中断终止计算机,诸如键入Ctrl + C或系统范围的事件,诸如用户注销或系统关闭。
你传递的关闭钩子必须遵循一些规则,但是,一定要仔细阅读所链接的文档,以避免出现任何问题的线索。这包括确保线程安全,线程快速终止等。
另外,正如Jesper指出的那样,关闭挂钩保证在VM正常关闭时运行,但如果VM进程被强制终止,吨。如果原生代码出现故障,或者您强行终止进程(kill -9
,taskkill /f
),则可能会发生这种情况。
但是在这些情况下,所有的赌注都无济于事,所以我不会浪费太多的思考。
14
只是为了快速控制台测试目的...
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
try {
Thread.sleep(200);
System.out.println("Shouting down ...");
//some cleaning up code...
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
+2
你的例子是RaspberryPI特定的('SoftPwm','gpio')。您可能想要跳过这些方法调用。 – harpun 2015-10-04 13:41:24
相关问题
- 1. Vb.net捕获Ctrl + C
- 2. 在c#中Ctrl + C时捕获文本
- 3. 捕获CTRL +在Firefox中
- 4. 如何捕获WPF/C#中的CTRL-BACKSPACE?
- 5. 捕获所有Ctrl-?在Android
- 6. C#捕获按Ctrl + PageUp键按键
- 7. wxPython ObjectListView捕获Ctrl-C快捷方式
- 8. 在bash脚本中的ssh中捕获Ctrl-C
- 9. 在VB.NET组合框中捕获ctrl + V
- 10. 无法捕获按Ctrl + C在C#控制台应用程序
- 11. 在浏览器上捕获Ctrl + W
- 12. 的Java createText不按Ctrl C,Ctrl键V
- 13. 尝试捕获Java中的System.Net.WebException(C#)
- 14. 在Java中捕获异常
- 15. 尝试在Java中捕获
- 16. 在Java中捕获TransactionRolledbackLocalException
- 17. 在Java中捕获异常
- 18. 在JAVA中捕获PSQLException
- 19. 如何在Python交互式控制台中捕获'Ctrl-D'?
- 20. 在C++中捕获音频
- 21. 如何在C++中使用preTranslate消息捕获组合键ALT + CTRL + INSERT
- 22. jQuery捕获CTRL + S和Command + S(Mac)
- 23. 捕获键盘事件CTRL + s
- 24. WPF - 按下CTRL + SHIFT时如何捕获?
- 25. 捕获CTRL-C并使用wxpython处理剪贴板数据
- 26. c#如何从文本框捕获Ctrl-R
- 27. 无法捕获ctrl-c退出函数退出bash脚本
- 28. 使用Ctrl-C退出tkinter应用并捕获SIGINT
- 29. 如何在Qt中捕捉Ctrl + Plus?
- 30. 如何在WPF RichEdit控件中捕获组合键(CTRL + ALT + SPACE)
当心关闭挂钩,不能保证在任何情况下运行;可能会出现这种情况,因为它们没有运行,所以请勿根据您在关机挂钩中执行的操作来使程序正常运行。 – Jesper 2009-10-23 08:08:20
当进程被强制终止时('TerminateProcess()'或'SIGKILL'),它们不会运行,但超出了正常运行的范围,并且由于Ctrl + C已经被关闭钩子覆盖了,所以使用它是安全的。无论如何,如果操作系统真的终止你的进程,你不能做太多事情。 – Joey 2009-10-23 08:45:38
如果我执行'kill'(发送一个TERM信号),这会在关机挂钩中被捕获吗? (请注意,它不同于'kill -9',我从上面可以理解它不会陷入困境。) – ADTC 2013-11-07 11:20:20