Хук отключения Springboot не работает с Windows TaskKill - PullRequest
1 голос
/ 24 января 2020

У меня есть приложение Apache Camel Spring Boot Java 8, которое работает на Windows 10. Оно корректно закрывается при нажатии 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);
  }
}

1 Ответ

1 голос
/ 24 января 2020

С Java API-интерфейс «Завершение работы»

Виртуальная машина Java отключается в ответ на два вида событий:

  • Программа завершается нормально, когда последний не -deemon поток завершается или когда вызывается метод exit (эквивалентно System.exit)
  • Виртуальная машина завершается в ответ на пользовательское прерывание, такое как ввод CTRL + C (SIGINT), или система событие, например, выход пользователя из системы или отключение системы.

https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#addShutdownHook (java .lang.Thread)

WM_CLOSE Сигнал от KillTask ​​равен не обрабатывается

...