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