В команде lsof в Ubuntu / Debian я вижу много строк, как показано ниже:
PROGRAM 829 root 140u sock 0,8 0t0 244182 protocol: TCP
Что это за строки?
Могут ли они быть результатом неудачных попыток TCP-соединения?
Эта строка отображается, когда lsof
не может найти дополнительную информацию о сокете TCP: он знает, что это сокет TCP, но не более того.
Я могу вспомнить две причины:
Маловероятно: сокет все еще не прослушивает и не подключается: например, сервер или клиент socket(AF_INET, SOCK_STREAM, 0)
создать TCP-сокет, но еще не позвонил listen(2)
или connect(2)
. Это могло быть вызвано нехваткой ресурсов или программным обеспечением с ошибками.
Скорее всего, сегодня: процесс, увиденный lsof
бежит в другой сетевое пространство имен, обычно в контейнере (Docker, LXC, LXD ...) и, следовательно, lsof
не имеет доступа к соответствующей информации и не отображает ее.
Затем вы должны запустить lsof
из того же сетевого пространства имен, что и процесс. В lsns
и nsenter
в этом могут сильно помочь команды. В вашем случае это, вероятно, сработает:
nsenter -t 829 --net lsof -n -p 829
В нормальных случаях lsof
будет отображать IPv4
или IPv6
вместо того sock
и будет иметь дополнительную информацию, например, порт прослушивания или задействованные адреса. Даже соединение, которое все еще продолжается, будет отображаться с задействованными адресами и, например, SYN_SENT
.