Назад | Перейти на главную страницу

Закройте TCP-порт без процесса

Я оказался в ситуации с TCP-портом в режиме прослушивания без назначенного ему процесса.

Есть ли способ закрыть этот порт без перезапуска сервера?

Проверка статуса порта:

me> netstat -tan | grep 8888
tcp        0      0 :::8888                :::*                    LISTEN

Ищем ответственного за процесс:

me> lsof -i -P | grep 8888

Команда выше ничего не возвращает

Пытаться netstat -ltpn | grep 8888

Вы описываете невозможный сценарий.

Я считаю, что в предыдущих плакатах не хватало того факта, что вы пытаетесь сопоставить порт процессу, которым вы не владеете. Поэтому ваш lsof ничего не возвращает, поскольку у этих инструментов нет разрешения на просмотр /proc записи, которые облегчили бы отображение этого порта -> PID. Ваш netstat в команде также отсутствует флаг -p. Запустите эти команды как root тогда все станет намного яснее.

запустить

fuser 8888/tcp

Это должно перечислить pid, работающие на порту.

netstat анализирует / proc / net / [tcp | udp | tcp6 | udp6], а затем просматривает / proc / $ pid / -area, чтобы найти соответствующие процессы, в то время как fuser и lsof «только» перемещаются по всему / proc / $ pid / -area, чтобы узнать, какие процессы известны для каких сокетов. В конечном итоге эти два разных подхода могут привести к разным результатам.

Если сокету не назначен процесс, есть два варианта:

  • Вы используете lsof / fuser, и нет процесса, выделяющего этот сокет, но, например, модуль ядра делает это. Вам нужно найти этот модуль.
  • вы используете netstat как пользователь, который не может получить доступ к / proc / $ pid / fd /.

Например, монтирование общего ресурса через NFS действительно приводит к аналогичным «прослушивающим» портам. Таким образом, эти порты снова появятся при подключении общего ресурса NFS и исчезнут после размонтирования общего ресурса NFS.

это страница рекомендует запустить sudo lsof -i tcp:8888 если netstat - это просто прочерк для имени процесса.

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

$ sudo lsof -i tcp:8888
COMMAND       PID USER FD   TYPE  DEVICE SIZE/OFF NODE NAME
my-proc-name 38116 root   16u  IPv6 326070554      0t0  TCP *:8888 (LISTEN)

Затем вы можете посмотреть вывод «ps» для 38116 (в данном случае), чтобы увидеть несуществующий процесс.

ps -ef grep 38116
root     38116     1  0 Apr24 ?        00:06:58 [my-proc-name] <defunct>

(я предполагаю, что это какой-то зомби-процесс, который еще не очистился?).

Другой вариант:

sudo ss -apn | grep 8888