Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java进程的Shutdown hook不';gradle守护进程中的t触发器_Java_Gradle - Fatal编程技术网

Java进程的Shutdown hook不';gradle守护进程中的t触发器

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

我有一个套接字服务器应用程序。 当进程停止时,此应用程序关闭服务器并从标准Java关闭挂钩内的端口解除绑定:

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
(或simple
ps
)的文档即可。

当前的Gradle版本默认使用Gradle守护程序。实际发生的情况是,在按下Ctrl+C(我想你是指Ctrl+Z)之后,你不仅终止了你的应用程序,还终止了整个Gradle过程。大约需要10秒钟。关闭钩子被执行,但有一个延迟,当Gradle与控制台输出断开连接时,您将看不到任何消息

目前最简单的解决方法是添加
--无守护进程
开关


建议Gradle改进此行为。您可以投票支持它:

您是否尝试使用--stop命令停止它?