Что означают строки «sock» в выводе lsof?

Что означают строки «sock» в выводе lsof?

В команде lsof в Ubuntu/Debian я вижу много строк, подобных следующим:

PROGRAM 829 root  140u     sock        0,8       0t0 244182 protocol: TCP

Что это за линии?

Могут ли они быть результатом неудачных попыток TCP-подключения?

решение1

Эта строка отображается, когда 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, .

Связанный контент