Почему после этого я вышел из приложения Spring Boot в оболочке Linux (с помощью CTRL Z), процесс все еще прослушивает порт 8080? (порт, используемый моим приложением

#java #linux #spring #spring-boot

Вопрос:

Я работаю над приложением Spring Boot, запускающим его на компьютере с Linux. Это пакетное приложение, содержащее средство администрирования Spring Boot, прослушивающее порт 8080.

У меня есть следующая «проблема»: я запускаю ее в свою оболочку в первый раз, используя эту команду:

 mvn spring-boot:run  

он правильно запускается, и я могу получить доступ к панели инструментов администратора Spring Boot по этому адресу http://localhost:8080/

Предположим, что я остановлю выполнение пакетного приложения, нажав CTRL Z на клавиатуре, поэтому приложение Spring Boot теперь остановлено, и я получу это выходное сообщение:

 [1]  Stopped mvn spring-boot:run  

Хорошо, теперь, если я снова запущу свое приложение той же командой «Пуск»:

 mvn spring-boot:run  

теперь я получаю это сообщение об ошибке:

 Description:  Web server failed to start. Port 8080 was already in use.  Action:  Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.  

Поэтому, если я выполню эту команду, чтобы найти процесс, который прослушивает порт 8080:

 andrea@ubuntu:~/git/notartel-api-batch$ netstat -ltnp | grep -w ':8080'  (Not all processes could be identified, non-owned process info  will not be shown, you would have to be root to see it all.) tcp6 2 0 :::8080 :::* LISTEN 16269/java   

Если теперь, когда я убил предыдущий процесс, я снова перезапущу приложение Spring Boot, оно будет запущено без проблем.

Почему, если я выхожу из приложения Spring Boot, прослушивающего порт 8080 (используя CTRL Z в оболочке Linux), этот процесс все еще прослушивает этот порт? Я ожидал, что все приложение будет убито и что в порту ничего не будет прослушиваться

Комментарии:

1. Ctrl Z не убивает приложение, но приостанавливает его и переводит в фоновый режим, используйте Ctrl C, если вы хотите прервать работу запущенного приложения.

Ответ №1:

Ctrl Z не убивает приложение, а приостанавливает его и переводит в фоновый режим, используйте Ctrl C , если вы хотите прервать запущенное приложение.

Ответ №2:

Я выполняю эту команду в своем терминале, чтобы очистить процесс в порту 8080.

 kill `lsof -i -n -P | grep TCP | grep 8080 | tr -s " " "n" | sed -n 2p`  

Ctrl C используется для уничтожения процесса с помощью сигнатуры сигнала, другими словами, это вежливое убийство .

Ctrl Z используется для приостановки процесса, посылая ему сигнал SIGTSTP, который похож на сигнал сна, который может быть отменен, и процесс может быть возобновлен снова.

Однако, когда процесс приостановлен , мы можем возобновить его снова с помощью fg (возобновление на переднем плане) и bg (возобновление в фоновом режиме), но я не могу возобновить прерванный процесс, в этом разница между использованием Ctrl C и Ctrl Z.

Ответ №3:

Если вы запускаете это

 mvn spring-boot:run  

на каком-либо другом терминале процесс не прекратит прослушивание порта, если вы закроете свою среду разработки.

Вместо запуска mvn spring-boot:run вы можете просто запустить основной файл приложения. После этого, когда вы закроете приложение, порт не будет прослушиваться.