有一个已回答的问题优雅地关闭 Java 命令行程序的最佳方法。当程序被 Ctrl+C 终止时,关闭挂钩会执行此任务。
我的问题是如果在Java程序执行过程中命令行本身关闭了如何优雅退出?我用关闭挂钩进行了测试,但在这种情况下它不起作用。我无法找出在这种情况下虚拟机会发生什么情况。进程及其所有线程是否立即被杀死?
关闭命令行会产生什么样的信号?
那么,如何解决这个特殊问题呢?
编辑:问题涉及 Windows 环境。
从逻辑上讲,应该引发 SIGHUP(终端挂起)。
实际上,我刚刚用一个简单的 shell 脚本检查了我的猜测。是的,当用户关闭启动应用程序(并且未从中分离)的终端模拟器时,应用程序会收到 SIGHUP。因此,设置一个 SIGHUP 处理程序并做出相应的反应。通常的行为是终止应用程序,但您的意图可能有所不同。
此外,如果您的 Java 应用程序执行任何 STDIN/STDOUT 操作,则应在收到 HUP 时将其关闭或至少重新配置,因为尝试从不存在的终端读取/写入将导致 SIGPIPE 和/或程序块。
对于 Windows,请看一下捕获 Windows 终端正在运行的进程关闭
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)