Java进程的Shutdown hook不';gradle守护进程中的t触发器
我有一个套接字服务器应用程序。 当进程停止时,此应用程序关闭服务器并从标准Java关闭挂钩内的端口解除绑定:Java进程的Shutdown hook不';gradle守护进程中的t触发器,java,gradle,Java,Gradle,我有一个套接字服务器应用程序。 当进程停止时,此应用程序关闭服务器并从标准Java关闭挂钩内的端口解除绑定: Runtime.getRuntime().addShutdownHook(new ShutdownHook()); 我使用应用程序gradle插件从命令行运行它: apply plugin: 'application' mainClassName = "com.ServerLauncher" 但当我从gradle运行应用程序时: ./gradlew :server:run 然后用c
Runtime.getRuntime().addShutdownHook(new ShutdownHook());
我使用应用程序gradle插件从命令行运行它:
apply plugin: 'application'
mainClassName = "com.ServerLauncher"
但当我从gradle运行应用程序时:
./gradlew :server:run
然后用ctrl+z关闭应用程序,我的关闭钩子不会触发
我猜这是因为gradle启动了它自己的进程,它启动了java进程,但java进程似乎没有收到关闭信号。我找到了解决方案,为了防止这种行为,我需要告诉gradle不要运行通过此命令行参数的守护进程线程
./gradlew :server:run --no-daemon
您最好继续使用守护进程,因为它提供了各种优势
然后有一种可能的解决方案,通过向应用程序发送术语信号而不是停止启动其执行的Gradle进程来真正停止应用程序。只需查看
kill
和jps
(或simpleps
)的文档即可。当前的Gradle版本默认使用Gradle守护程序。实际发生的情况是,在按下Ctrl+C(我想你是指Ctrl+Z)之后,你不仅终止了你的应用程序,还终止了整个Gradle过程。大约需要10秒钟。关闭钩子被执行,但有一个延迟,当Gradle与控制台输出断开连接时,您将看不到任何消息
目前最简单的解决方法是添加--无守护进程
开关
建议Gradle改进此行为。您可以投票支持它:您是否尝试使用--stop命令停止它?