Їх існує багато способів вимкнути пружинний додаток. Перший - викликати close () на ApplicationContext
:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Ваше запитання передбачає, що ви хочете закрити свою програму, роблячи це Ctrl+C
, що часто використовується для припинення команди. В цьому випадку...
Вживання endpoints.shutdown.enabled=true
- не найкращий рецепт. Це означає, що ви виставляєте кінцеву точку, щоб скасувати заявку. Отже, залежно від випадку використання та оточення, вам доведеться захистити його ...
Ctrl+C
має працювати дуже добре у вашому випадку. Я припускаю, що ваша проблема викликана ampersand (&) Більше пояснення:
У контексті весняних програм може бути зареєстрований гак відключення за час виконання JVM. Дивіться документацію ApplicationContext .
Я не знаю, чи Spring Boot налаштовує цей гачок автоматично, як ви сказали. Я припускаю, що так.
Увімкнено Ctrl+C
, ваша оболонка надсилає INT
сигнал додатку переднього плану. Це означає "будь ласка, перервіть ваше виконання". Додаток може захопити цей сигнал і зробити очищення до його закінчення (гачок, зареєстрований Spring), або просто проігнорувати його (погано).
nohup
це команда, яка виконує наступну програму з пасткою для ігнорування сигналу HUP. HUP використовується для припинення програми під час відключення (закрийте, наприклад, ssh-з'єднання). Більше того, він перенаправляє виходи, щоб уникнути того, що ваша програма блокується на зниклому TTY. nohup
НЕ ігнорує сигнал INT. Так що НЕ заважає Ctrl+C
працювати.
Я припускаю, що ваша проблема викликана ampersand (&), а не nohup. Ctrl+C
посилає сигнал процесам переднього плану. "Амперсанд" призводить до запуску програми у фоновому режимі. Одне рішення: робити
kill -INT pid
Використовуйте kill -9
або kill -KILL
погано, оскільки додаток (тут JVM) не може захопити його, щоб закінчитися граціозно.
Ще одне рішення - повернути свою програму на перший план. Тоді Ctrl+C
буде працювати. Погляньте на контроль Bash Job, точніше на fg
.