springboot关闭钩子不适用于windows taskkill

rryofs0p  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(656)

我有一个在Windows10上运行的ApacheCamelSpringBootJava8应用程序。当按下ctrl-c时,它会优雅地关闭,尽管有时我必须按两次。但使用taskkill时,答案总是

C:\Windows\system32>taskkill /PID 1048
ERROR: The process with PID 1048 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

我的目标是创建一个windows服务,但同样,当停止服务时,应用程序会突然终止。为什么ctrl-c工作,而taskkill不工作?我该怎么做才能让windows服务正常关闭?我的应用程序的主类看起来像

import org.apache.camel.spring.Main;

@SpringBootApplication
@EnableScheduling
public class InformerApplication {

  public static void main(String[] args) throws Exception {
    SpringApplication.run(InformerApplication.class, new String[0]);
    Main.main( args);
  }
}
a1o7rhls

a1o7rhls1#

从java关闭钩子api
java虚拟机将关闭,以响应两种事件:
当最后一个非守护进程线程退出或调用exit(相当于system.exit)方法时,程序通常会退出
虚拟机响应于用户中断(如键入ctrl+c(sigint))或系统范围的事件(如用户注销或系统关闭)而终止。
https://docs.oracle.com/javase/7/docs/api/java/lang/runtime.html#addshutdownhook(java.lang.thread)
未处理来自killtask的wm\u close信号。

相关问题