Как LSOF сопоставляет порт для обработки в Solaris?
У меня есть представление о том, как это делается в Linux, они, вероятно, проходят через / proc // fd и отображают сокеты, используемые каждым процессом.
К сожалению, это не похоже на сокеты списка записей / proc // fd в Solaris. Кто-нибудь знает, как lsof будет делать это в этой системе? Или как вообще об этом?
Просто для повторения, что именно мне нужно: мне нужен какой-то способ узнать, какие процессы слушают какие порты (без использования lsof, конечно) в Solaris.
2 ответа
Если вы используете Solaris 11.2, вы можете использовать netstat -u
, По справочной странице:
-u
Перечисляет пользователя, идентификатор процесса и программу, которая первоначально создала конечную точку сети или контролирует ее сейчас.
/proc/<pid>/fd
перечисляет все дескрипторы открытых файлов, в том числе связанные с сокетом, например:
# pwd
/proc/408/fd
# ls -l
total 4
c--------- 1 root sys 13, 2 Jul 31 23:12 0
c--------- 1 root sys 97, 1 Jul 31 23:06 1
p--------- 0 root root 0 Jul 31 23:06 10
p--------- 0 root root 0 Jul 31 23:06 11
c--------- 1 root sys 97, 1 Jul 31 23:06 2
-r--r--r-- 1 root root 1209 Jul 31 23:06 3
D--------- 1 root root 0 Jul 31 23:06 4
s--------- 0 root root 0 Jul 31 23:06 5
s--------- 0 root root 0 Jul 31 23:06 6
p--------- 0 root root 0 Jul 31 23:06 7
p--------- 0 root root 0 Jul 31 23:06 8
s--------- 0 root root 0 Jul 31 23:06 9
Здесь файловые дескрипторы 5
,6
а также 9
безусловно, розетки, как показывает их s
тип файла.
Не уверен насчет чего lsof
делает под прикрытием, но чтобы получить детали сокета, pfiles
читает процесс внутренних структур. Смотрите его методы дозокета.