Как освободить порт linux

Обновлено: 05.07.2024

fuser -k номер/tcp вроде отрабатывает, но ошибка всё равно остаётся какое-то время, в процессах сервер не висит - закрывается корректно.

Как освободить порт в этом случае?

2,239 13 13 серебряных знаков 20 20 бронзовых знаков Что если написать скрипт-обёртку для запуска, который бы ждал, пока порт освободится и потом запускал сервер? @NickVolynkin - основная цель тут - побороть время. Тут проц помощнее ищешь чтобы собирало скорее, секунды экономишь, а оно порт занимает на 2 минуты - никуда не годится ) @NickVolynkin, нет. я понял уже из-за чего это. Обмен данными происходит по WebSocket. Закрытие соединения WebSocket предусматривает обмен закрывающими фреймами. Я тестировал парсинг фрейма, но не сделал корректную обработку закрытия (не отвечал клиенту должным образом и не вычитывал его closure запрос) - в результате сервер то я закрывал, а на TCP по этому порту висели данные и система не теряла надежды, что их кто-нибудь подберёт )))

Как и бывает в большинстве подобных случаев, проблема оказалась в другом.

Разрабатываемый сервер осуществляет коммуникацию с клиентами по WebSocket. Закрытие соединения WebSocket предусматривает обмен закрывающими фреймами. Я тестировал парсинг WS-фрейма, но до корректной обработки закрытия руки не дошли (не отвечал клиенту должным образом и не вычитывал его closure запрос) - в результате сервер то закрывался, а на TCP по этому порту висели данные, отправленные клиентом в пустоту - то ли ping, то ли close запрос. Система не теряла надежды, что их кто-нибудь подберёт, и держала порт.

Как только клиент (в данном эксперименте браузер Firefox) стал получать ответ о закрытии, он корректно отключался, а при перезапуске сервера тот стартовал моментально на том же порте без SO_REUSEADDR , ошибка 88 более не возникала.

Да, решение не является ответом по изначальной тематике вопроса, но пусть оно служит памяткой для подобный проблем - всегда проверять корректность завершения сеанса связи в разрабатываемых приложениях.

этой fuser 8080/tcp напечатает вам PID процесса, связанного с этим портом.

и fuser -k 8080/tcp убьет этот процесс.

работает только на Linux. Более универсальным является использование lsof -i4 (или 6 для IPv6).

чтобы перечислить любой процесс, прослушивающий порт 8080:

чтобы убить любой процесс прослушивания порта 8080:

или более яростно:

( -9 соответствует SIGKILL - terminate immediately/hard kill сигнал: Вижу список сигналов уничтожения и какова цель опции -9 в команде kill?. Если сигнал не указан в kill , термин сигнал a.к. a. -15 или soft kill отправляется, чего иногда недостаточно убить процесс.).

используется grep java as tomcat использует java как их процессы.

он покажет список процессов с номером порта и идентификатором процесса

число перед /java - это идентификатор процесса. Теперь используйте kill команда, чтобы убить процесс

-9 подразумевает, что процесс будет насильственно убит.

вы можете использовать команду lsof. Пусть номер порта, как здесь 8090

эта команда возвращает список открытых процессов на этот порт.

чтобы освободить порт, убейте процесс, используя его (идентификатор процесса 75782).

Это сработало для меня. вот ссылка из оригинального поста: ссылке

Я бы добавил этот One-liner только для прослушивания определенного порта:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

Если вы хотите убить процесс, работающий на port number 8080, то сначала вам нужно найти 8080 port process identification number(PID), а затем убить его. Выполните следующую команду, чтобы найти 8080 номер порта PID:

  • судо - команда для запроса прав администратора (id пользователя и пароль).
  • lsof - список файлов(также используется для связанного списка процессов)
  • - t - показать только ID процесса
  • -Я - показать только интернет-соединения, связанные с процессом
  • :8080 - показывать только процессы в этом номере порта

Теперь вы можете легко убить свой PID, используя следующую команду:

  • kill-команда, чтобы убить процесс
  • -9 - сильно

вы можете использовать одну команду, чтобы убить процесс на определенном порту, используя следующая команда:

Для больше вы можете увидеть следующую ссылку как убить процесс на определенном порту в linux

это печатает для stdout идентификаторы процессов всего, что работает на <port_number> :

он также печатает некоторые вещи в stderr, так:

затем мы можем предоставить эти идентификаторы процессов в kill команда:

вы также можете поместить это в функцию, если вы делаете это много:

чтобы узнать pid службы, работающей на определенном порту:

вы получите описание этого процесса. Теперь используйте kill или kill -9 pid. Легко убил.

этой fuser 8080/tcp выведет вам PID процесса, связанного с этим портом.

и fuser -k 8080/tcp убьет этот процесс.

работает только на Linux. Более универсальным является использование lsof -i4 (или 6 для IPv6).

чтобы перечислить любой процесс, прослушивающий порт 8080:

чтобы убить любой процесс прослушивания порта 8080:

или более яростно:

( -9 соответствует SIGKILL - terminate immediately/hard kill сигнал: Вижу список сигналов убийства и какова цель опции -9 в команде kill?. Если сигнал не указан в kill , термин сигнал a. k. a. -15 или soft kill отправляется, что иногда недостаточно чтобы убить процесс.).

используйте команду

используется grep java как tomcat использует java как их процессы.

он покажет список процессов с номером порта и идентификатором процесса

число перед /java - это идентификатор процесса. Теперь используйте kill команда убить процесс

-9 подразумевает, что процесс будет насильственно убит.

вы можете использовать команду lsof. Пусть номер порта, как здесь 8090

эта команда возвращает список открытых процессов на этот порт.

что-то вроде.

чтобы освободить порт, убейте процесс, используя его (идентификатор процесса 75782).

этот работал на меня. вот ссылка из оригинального поста: ссылке

Я бы добавил этот один лайнер только для прослушивания на определенном порту:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

  • судо - команда для запроса прав администратора (идентификатор пользователя и пароль).
  • lsof - список файлов(также используется для связанного списка процессов)
  • - t - показать только идентификатор процесса
  • -Я - показывать только процесс, связанный с подключением к интернету
  • :8080 - показывать только процессы в этом номере порта
  • убить-команда, чтобы убить процесс
  • -9 - сильно

это выводит на stdout идентификаторы процессов всего, что работает на <port_number> :

он также печатает некоторые вещи в stderr, так:

затем мы можем предоставить эти идентификаторы процесса в kill команда:

вы также можете поместить это в функцию, если вы делаете это много:

чтобы узнать pid службы, работающей на определенном порту:

вы получите описание этого процесса. Теперь используйте kill или kill -9 pid. Его легко убить.

Эл.г

netstat -ap | grep :8080

теперь:

не забудьте выполнить все команды как root

Я попытался закрыть tomcat, используя ./shutdown.sh из каталога tomcat /bin . Но обнаружил, что сервер не был закрыт должным образом. И поэтому мне не удалось перезапустить
Мой кот запущен на порту 8080 .

Я хочу убить процесс tomcat, запущенный на 8080 . Сначала я хочу иметь список процессов, запущенных на определенном порту (8080), чтобы выбрать, какой процесс нужно убить.

Использовали grep java , поскольку tomcat использует java в качестве своих процессов.

Он покажет список процессов с номером порта и идентификатором процесса.

Число перед /java является идентификатором процесса. Теперь используйте команду kill , чтобы убить процесс.

-9 означает, что процесс будет принудительно завершен.

Получите PID задачи и завершите ее.

Чтобы узнать идентификатор службы, работающей на определенном порту:

Вы получите описание этого процесса. Теперь используйте kill или kill -9 pid. Легко убивается.

netstat -ap | grep :8080

Не забудьте запускать все команды как root

Это выводит на стандартный вывод идентификаторы процессов всего, что запущено на <port_number> :

Он также выводит некоторые данные в stderr, поэтому:

Затем мы можем передать эти идентификаторы процесса команде kill :

Вы также можете поместить это в функцию, если будете делать это часто:

Лучший способ убить все процессы на определенном порту;

Если вы хотите убить процесс, запущенный на порту с номером 8080, сначала вам нужно найти идентификационный номер процесса порта 8080 (PID), а затем убить его. Выполните следующую команду, чтобы найти PID номера порта 8080:

  • sudo - команда для запроса прав администратора (идентификатор пользователя и пароль).
  • lsof - список файлов (также используется для вывода списка связанных процессов)
  • -t - показывать только идентификатор процесса
  • -i - отображать только процесс, связанный с подключением к Интернету.
  • : 8080 - показывать только процессы с этим номером порта

Итак, теперь вы можете легко убить свой PID, используя следующую команду:

  • kill - команда убить процесс
  • -9 - насильно

Вы можете использовать одну команду, чтобы убить процесс на определенном порту, используя следующую команду:

Для получения дополнительной информации вы можете увидеть следующую ссылку Как убить процесс на конкретный порт в Linux

Объяснение здесь: используйте комбинацию lsof и kill

Выберите pid и используйте kill

Вы можете использовать команду lsof. Пусть номер порта, как здесь, 8090

Эта команда возвращает список открытых процессов на этом порту.

Чтобы освободить порт, завершите использующий его процесс (идентификатор процесса - 75782)…

Однострочный, чтобы убить только LISTEN на определенном порту:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)

Чтобы вывести список всех процессов, прослушивающих порт 8080:

Чтобы убить любой процесс, прослушивающий порт 8080:

Или более жестоко:

( -9 соответствует сигналу SIGKILL - terminate immediately/hard kill : см. Список сигналов отключения и Для чего нужен параметр -9 в команде kill?. Если для kill не указан сигнал, Передается сигнал TERM, также известный как -15 или soft kill , что иногда недостаточно, чтобы убить процесс.).

Этот fuser 8080/tcp напечатает вам PID процесса, привязанного к этому порту.

И этот fuser -k 8080/tcp убьет этот процесс.

Работает только на Linux. Более универсальным является использование lsof -i4 (или 6 для IPv6).

Это убьет программы, работающие на порту 80.

Как убить процесс, если служба на порту не отвечает

Это можно поместить в файл и регулярно запускать из sudo crontab.

Опираться на то, что сказал @ veer7:

Если вы хотите знать, что было в порту, сделайте это, прежде чем убивать его.

Используйте 'ps' и номер процесса, о котором сообщает netstat.

В моем случае у cent os есть проблема в предложенном ответе. Поэтому я использовал следующее решение:

Другой способ с Git Bash:

  1. сначала проверьте процесс netstat -lt
  2. проверить идентификатор процесса fuser <port number>/tcp
  3. убить процесс, запущенный на порту kill <process id>

Я работаю над системой Yocto Linux, которая имеет ограниченный набор доступных инструментов Linux. Я хотел убить процесс, который использовал определенный порт (1883 г.).

Во-первых, чтобы узнать, какие порты мы слушаем, я использовал следующую команду:

Затем я нашел имя процесса, используя порт 1883, следующим образом:

Как мы видим выше, это программа /usr/sbin/mosquitto , которая использует порт 1883.

Напоследок убил процесс:

Я использовал systemctl , потому что в данном случае это была системная служба.

Читайте также: