#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 вы можете просто запустить основной файл приложения. После этого, когда вы закроете приложение, порт не будет прослушиваться.