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

lsof не показывает, какой порт прослушивает процесс

У меня много процессов на коробке, прослушивающих несколько портов.
Я пытаюсь сопоставить порты с pid.
Проблема в том, что lsof не сообщает мне, какие порты какому процессу принадлежат.

Учитывая, что apache прослушивает порт 80, я вижу, что он прослушивает через netstat:
user@host% netstat -an|grep LISTEN|grep 80
*.80 *.* 0 0 49152 0 LISTEN

Но когда я пытаюсь сопоставить порт 80 с pid, я ничего не получаю:
user@host% lsof -iTCP:80 -t

Когда я пытаюсь посмотреть, какие сокеты использует этот конкретный pid, я получаю:
user@host% lsof -lnP -p31 -a -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
libhttpd. 31 0 15u IPv4 0x6002d970b80 0t0 TCP *:65535 (LISTEN)

Обратите внимание на *: 65535 в столбце ИМЯ.

Кто-нибудь знает, почему lsof не сообщает об используемом порту?

Я работаю как root. Я использую смесь версий lsof и os:
lsof v4.77 на Solaris10 sparc
lsof v4.72 на Redhat4.2
и т.д

Я знаю, что решения Linux могут использовать "netstat -p",
поэтому я думаю, я только ищу, почему Solaris не работает, но я обнаружил, что lsof часто молчит и не показывает мне ожидаемые данные.

Вы бы предпочли использовать pfiles, которые являются частью Solaris и поддерживаются Sun, в отличие от lsof.

Его использование немного отличается, поскольку он ожидает pid в качестве аргумента, но вы можете добиться того, чего хотите, с помощью чего-то вроде:

pfiles $(pgrep libhttpd)

или даже, если вы не знаете имя процесса:

pfiles /proc/*