gpt4 book ai didi

java - 如何优雅地关闭因关闭执行它的命令行而终止​​的 Java 应用程序?

转载 作者:可可西里 更新时间:2023-11-01 13:44:20 27 4
gpt4 key购买 nike

Best Way to Gracefully Shutdown a Java Command Line Program 上有一个已回答的问题.当程序被 Ctrl+C 终止时,关闭 Hook 会执行此操作。

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

那么,如何解决这个特殊问题呢?

编辑:问题与 Windows 环境有关。

最佳答案

从逻辑上讲,应该引发 SIGHUP(终端挂断)。

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

此外,如果您的 Java 应用程序执行任何 STDIN/STDOUT 操作,它应该在收到 HUP 时关闭或至少重新配置,因为尝试从不存在的终端读取/写入会导致 SIGPIPE 和/或程序 block .

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

关于java - 如何优雅地关闭因关闭执行它的命令行而终止​​的 Java 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27165594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com