У меня много процессов на коробке, прослушивающих несколько портов.
Я пытаюсь сопоставить порты с 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/*