Освобождение порта TCP / IP?


Ответы:


214

Как уже говорили другие, вам придется убить все процессы, которые прослушивают этот порт. Самый простой способ сделать это - использовать команду fuser (1). Например, чтобы увидеть все процессы, прослушивающие запросы http на порту 80 (запустите от имени пользователя root или используйте sudo):

# fuser 80/tcp

Если вы хотите убить их, просто добавьте опцию -k.


1
Я обнаружил, что отправка запроса в порт также очищает его (хотя я не эксперт по Linux)
Matej

1
Чтобы установить fuser в Debian: sudo apt-get install psmisc ( bitflop.com/document/107 )
Корнеил

1
Это сработало, но мне пришлось установить psmisc и на CentOs 7 ( sudo yum install psmisc)
Марлон Бернардес

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Hanynowsky

76

Чтобы убить определенный порт в Linux, используйте команду ниже

sudo fuser -k Port_Number/tcp

замените Port_Number вашим занятым портом.


6
Это фактически убивает процесс, который открыл порт, а не сам порт.
Винайц

16

Вы можете использовать tcpkill(часть dsniffпакета), чтобы уничтожить соединение, которое находится на нужном порту:

sudo tcpkill -9 port PORT_NUMBER

11
это просто зависает$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Anentropic

16

В типе терминала:

netstat -anp|grep "port_number"

Он покажет детали порта. Перейти к последнему столбцу. Это будет в этом формате. Например: - PID / Java

затем выполните:

kill -9 PID. Worked on Centos5

Для MAC:

lsof -n -i :'port-number' | grep LISTEN

Образец ответа:

java   4744 (PID)  test  364u  IP0 asdasdasda   0t0  TCP *:port-number (LISTEN)

и затем выполните:

kill -9 PID 

Работал на Macbook


очевидно, это не сработает, если столбец PID для этого порта пуст
Anentropic

1
... и это происходит, если у вас нет разрешения на просмотр процесса ... попробуйте sudo netstatна самом деле увидеть PID :)
Anentropic

Я пытался убить порт на экземпляре amazon ec2 через putty cli. Навсегда сказал, что у него нет запущенных процессов, но порт (4200 для углового приложения) все еще открыт. Это единственная команда, которая работала для меня.
vtechmonkey

9

Команда "netstat --programs"выдаст вам информацию о процессе, если вы являетесь пользователем root. Тогда вам придется убить «оскорбительный» процесс, который вполне может начаться снова, просто чтобы вас раздражать :-).

Чего вы на самом деле пытаетесь достичь здесь? Решения могут отличаться в зависимости от процессов, содержащих эти порты.


8

Чтобы проверить все порты:

netstat -lnp

Чтобы закрыть открытый порт:

fuser -k port_no/tcp

Пример:

fuser -k 8080/tcp

В обоих случаях вы можете использовать sudoкоманду при необходимости.


7

Убейте процесс, который прослушивает рассматриваемый порт. Я считаю, что netstat показывает вам идентификаторы процессов.


3
netstat -anp | grep <порт> последний столбец имеет процесс
user1747935

2

Если вы действительно хотите немедленно завершить процесс, вы отправляете ему сигнал KILL вместо сигнала TERM (последний - запрос на остановку, первый вступит в силу немедленно без какой-либо очистки). Это легко сделать:

kill -KILL <pid>

Имейте в виду, однако, что в зависимости от программы, которую вы останавливаете, ее состояние может быть сильно повреждено при этом. Обычно вы хотите отправить сигнал KILL только тогда, когда обычное завершение не работает. Мне интересно, в чем заключается основная проблема, которую вы пытаетесь решить, и является ли убийство правильным решением.


0

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



-14

Выключение компьютера всегда убивает процесс для меня.


выключение сервера редко.
ваки

24
ты получил свой "самый смешной" значок?
jplandrain

Нет необходимости выключать компьютер.
Анил Чахал

Лучшая идея в истории
Валентин Руж

11
в отличие от некоторых других ответов, это, безусловно, будет работать
Anentropic
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.