Как убить «невидимый» процесс с помощью порта

Как убить «невидимый» процесс с помощью порта

На машине Linux пытаюсь запустить сервер Glassfish.

./startserv

Это возвращает следующее сообщение:

There is a process already running using the admin port 4848 -- it is probably another instance of a Glassfish server

Попытался определить, какой это процесс, с помощью следующей команды:

lsof -t -i tcp:4848

На другой машине, на которой запущен Glassfish, эта команда возвращает идентификатор процесса, используемый Glassfish. Однако на машине, на которой у нас возникла проблема, ничего не возвращается.

Каков наилучший способ определить и завершить процесс, использующий порт 4848, учитывая, что это lsof -t -i tcp:4848не помогает?

Спасибо

решение1

Вероятно, здесь происходит две вещи. Во-первых, что-то прослушивает порт, а lsof и его друзья это пропускают, или скрипт запуска/сообщение об ошибке перепутаны.

Сетевые пространства имен могут скрывать порт, но если вы хотите напрямую запросить файловую систему proc, попробуйте

grep 12f0 /proc/net/tcp
grep 12f0 /proc/net/tcp6

12f0 — это 4848 в шестнадцатеричном формате, и в этих файлах ядро ​​хранит информацию о сокетах TCPv4 и TCPv6.

Если вы получаете совпадающие строки, то действительно что-то прослушивает порт, и ваши инструменты подозреваются. Отсутствие совпадения означает, что либо у вас задействованы пространства имен, либо скрипт запуска работает.

Вы также можете проверить, действительно ли сокет используется, с помощью netcat.

nc -l 4848

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

Связанный контент