如何正常关闭因关闭执行命令行而终止​​的Java应用程序?

Best Way to Gracefully Shutdown a Java Command Line Program上有一个已回答的问题.如果程序被Ctrl C终止,则关闭挂钩会执行该作业.

我的问题是如果在执行Java程序期间命令行本身被关闭,如何优雅地退出?我用关机钩测试但在这种情况下它不起作用.我不知道在这种情况下虚拟机会发生什么.该过程及其所有线程是否立即被杀死?
关闭命令行产生什么样的信号?

那么,这个特殊问题怎么解决?

编辑:问题涉及Windows环境.

最佳答案
逻辑上,应该提出SIGHUP(终端挂断).

实际上,我刚用一个简单的shell脚本检查了我的猜测.是的,当用户关闭启动了应用程序(并且未从中分离)的终端仿真器时,应用程序将收到SIGHUP.所以设置一个SIGHUP处理程序并做出相应的反应.通常的行为是终止应用程序,但您的意图可能不同.

此外,如果您的Java应用程序执行任何STDIN / STDOUT操作,则应在收到HUP时将其关闭或至少重新配置,因为尝试从非现有终端读取/写入将导致SIGPIPE和/或程序阻塞.

对于Windows,请查看Catch Windows terminal closing on running process

转载注明原文:如何正常关闭因关闭执行命令行而终止​​的Java应用程序? - 代码日志