Bir yay uygulamasını kapatmanın birçok yolu vardır. Biri ApplicationContext:
ApplicationContext ctx =
SpringApplication.run(HelloWorldApplication.class, args);
// ...
ctx.close()
Sorunuz uygulamanızı yaparak kapatmak istediğinizi gösteriyor Ctrl+C, bu genellikle bir komutu sonlandırmak için kullanılır. Bu durumda...
Kullanım endpoints.shutdown.enabled=trueen iyi tarif değildir. Bu, başvurunuzu sonlandırmak için bir son nokta açığa çıkardığınız anlamına gelir. Bu nedenle, kullanım durumunuza ve ortamınıza bağlı olarak, onu güvence altına almanız gerekecek ...
Ctrl+Csenin durumunda çok iyi çalışmalı. Sorununuzun "ve" işaretinden (&) kaynaklandığını varsayıyorum. Daha fazla açıklama:
Bir Spring Application Context, JVM çalışma zamanı ile bir kapatma kancası kaydetmiş olabilir. ApplicationContext belgelerine bakın .
Spring Boot bu kancayı dediğiniz gibi otomatik olarak yapılandırır mı bilmiyorum. Sanırım öyle.
Açık Ctrl+C, kabuğunuz INTön plan uygulamasına bir sinyal gönderir . "Lütfen infazınızı yarıda kesin" anlamına gelir. Uygulama bu sinyali yakalayabilir ve sonlandırılmadan önce temizleme yapabilir (Bahar tarafından kaydedilen kanca) veya basitçe görmezden gelebilir (kötü).
nohupHUP sinyalini yok saymak için aşağıdaki programı bir tuzakla çalıştıran komuttur. HUP telefonu kapattığınızda programı sonlandırmak için kullanılır (örneğin ssh bağlantınızı kapatın). Ayrıca, programınızın kaybolan bir TTY'yi engellemesini önlemek için çıktıları yeniden yönlendirir. nohupINT sinyalini ihmal ETMEZ. Yani Ctrl+Cçalışmayı engellemez .
Sorununuzun nohup'tan değil "ve" işaretinden (&) kaynaklandığını varsayıyorum. Ctrl+Cön plan süreçlerine bir sinyal gönderir. Ve işareti, uygulamanızın arka planda çalışmasına neden olur. Tek çözüm: yapmak
kill -INT pid
Kullanın kill -9veya kill -KILLkötüdür çünkü uygulama (burada JVM) onu düzgün bir şekilde sonlandırmak için yakalayamaz.
Diğer bir çözüm de uygulamanızı ön plana çıkarmaktır. Sonra Ctrl+Cçalışacak. Bash Job kontrolüne daha kesin olarak bir göz atın fg.