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

Как увидеть Java-процесс, использующий порт

У меня есть небольшое приложение Java ServerSocket, работающее на порту 4444. Я хотел увидеть процесс, использующий этот порт в моем терминале OSX, и моей первой мыслью было сделать следующее:

netstat -a | grep 4444 однако это не дает мне никаких результатов.

lsof -i :4444 и я получаю следующий (правильный) результат:

COMMAND   PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    66389 admin   18u  IPv6 0x1ae123a422ebe931      0t0  TCP *:krb524 (LISTEN)

Может ли кто-нибудь сказать мне, почему netstat не показывает порт, а lsof показывает?

Mac OSX основана на BSD, поэтому netstat под Mac OSX не сможет показать вам имя pid / процесса. Как вы уже выяснили, lsof это правильный выбор.

редактировать: Версия Netstat, включенная в Mac OSX, не интерпретирует -p flag, как и в других дистрибутивах (протокол вместо программы), поэтому, хотя Netstat, вероятно, не работал по причинам, изложенным ниже, lsof по-прежнему был правильным способом найти ответ.

Netstat по умолчанию использует понятные имена / определения для портов (например, ssh вместо того 22). Добавить -n флаг для использования числовых адресов хостов и номеров портов. Дополнительно добавьте -p чтобы показать PID и имя программы.

В итоге: netstat -anp | grep 4444 это, вероятно, то, что вам нужно.

Вот пример:

# netstat -anp | grep 10050
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1121/zabbix_agentd

Netstat также распечатает любые другие связанные сетевые подключения, а не только сокеты в LISTEN штат.