Звільнення портів 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 )
Korneel

1
Це спрацювало, але мені довелося встановити psmisc також на CentOs 7 ( sudo yum install psmisc)
Марлон Бернардес

1
kill -9 $(fuser 80/tcp 2>/dev/null)
Ганиновський

76

Для вбивства конкретного порту в Linux використовуйте команду нижче

sudo fuser -k Port_Number/tcp

замініть Port_Number на зайнятий порт.


6
Це фактично вбиває процес, який відкрив порт, а не сам порт.
vinayc

16

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

sudo tcpkill -9 port PORT_NUMBER

11
це просто висить$ sudo tcpkill -9 port 5432 tcpkill: listening on lxcbr0 [port 5432]
Анентропний

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насправді побачити
ПІД

Я намагався вбити порт на екземплярі Amazon ec2 через шпаклівку cli. Форевер сказав, що у нього немає процесів, але порт (4200 для кутового додатка) все ще відкритий. Це єдина команда, яка працювала для мене.
vtechmonkey

9

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

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


8

Щоб перевірити всі порти:

netstat -lnp

Щоб закрити відкритий порт:

fuser -k port_no/tcp

Приклад:

fuser -k 8080/tcp

В обох випадках ви можете використовувати sudoкоманду, якщо потрібно.


7

Вбийте процес, який слухає відповідний порт. Я вважаю, що netstat показує, що ви обробляєте ідентифікатори.


3
netstat -anp | grep <port> останній стовпець має процес
користувач1747935

2

Якщо ви дійсно хочете вбити процес негайно, ви надсилаєте йому сигнал KILL замість сигналу TERM (останній запит припинити, перший набирає чинності негайно без очищення). Це легко зробити:

kill -KILL <pid>

Однак майте на увазі, що залежно від програми, яку ви зупиняєте, її стан може сильно зіпсуватися при цьому. Зазвичай ви бажаєте надіслати сигнал KILL лише тоді, коли нормальне припинення не працює. Мені цікаво, яка основна проблема полягає в тому, що ви намагаєтеся вирішити і чи вбивство - це правильне рішення.




-14

Вимкнення комп'ютера для мене завжди вбиває процес.


відключення серверної машини зустрічається рідко.
waqas

23
ви отримали свій "найсмішніший" значок?
jplandrain

Не потрібно вимикати комп’ютер.
Аніл Чахал

Найкраща ідея колись 10/10
Валентин Рудж

10
На відміну від деяких інших відповідей, це, безумовно, спрацює
Anentropic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.