更具体地说,我有一个多线程命令行Java应用程序,它运行并收集数据,直到用户终止它。
用户终止它的明显方法是推送Control-C,但是我需要在VM中安装一个关闭钩子并处理所有线程。
是否有更好/更合适的方式让用户通知应用程序是否需要关机?
例如,有没有办法捕获其他一些组合键并在我的应用程序中设置一个布尔标志?
作为进一步的澄清,我在C中寻找与信号处理功能相似的东西。
答案 0 :(得分:2)
一种方法是创建一个“监听”标准输入的新线程。根据您决定的任何键模式,该线程可以在主应用程序中设置标志。
答案 1 :(得分:1)
是否有更好/更合适的方式让用户通知 应用程序是时候关闭了吗?
最好的方法是使用Java Monitoring and Management
例如,请查看此post。
最好不要依赖关闭钩子.java中的挂钩钩子适用于KILL -15
和KILL
而不适用于KILL -9
( HARD KILL )
答案 2 :(得分:1)
考虑使用这样的关闭钩子:
Runtime.getRuntime().addShutdownHook(shutdownHook);
让您自己的代码在JVM终止于以下条件之一时运行:
您可以参考:http://www.ibm.com/developerworks/ibm/library/i-signalhandling/了解更多详情(免责声明:非常古老的文章与JDK 1.3.1有关)
答案 3 :(得分:0)
这不是特定于Java的解决方案,但在关机期间(至少在Linux上),操作系统会向所有进程发送SIGTERM
(在宽限期后跟随SIGKILL)。您的应用程序应为此安装处理程序,然后正常关闭。执行此操作后,当您关闭VM时,它将自动处理。