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

Что это за строки в выводе lsof?

В команде 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.