Ответ
Для инспекции сетевых соединений процесса я чаще всего использую ss (более современная замена netstat) и lsof. Это помогает при диагностике утечек соединений, поиске неожиданных listener'ов или проверке доступности сервиса.
1. Использование ss (socket statistics)
ss быстрее netstat и показывает больше деталей.
# Показать все TCP/UDP сокеты с именами процессов и портов
sudo ss -tulnp
# Фильтрация по конкретному PID (например, 12345)
sudo ss -tulnp | grep "pid=12345"
# Показать только установленные TCP-соединения для процесса
sudo ss -tnp state established | grep "pid=12345"
2. Использование lsof (list open files)
Поскольку сетевые сокеты — это тоже файловые дескрипторы, lsof отлично подходит.
# Все сетевые соединения процесса
sudo lsof -i -a -p <PID>
# Конкретный тип соединений (например, TCP на порту 80)
sudo lsof -i TCP:80 -a -p <PID>
# Показать процессы, слушающие порты
sudo lsof -i -s TCP:LISTEN
3. Прямой просмотр через /proc Можно посмотреть дескрипторы сокетов напрямую.
# Список всех файловых дескрипторов, которые являются сокетами
ls -la /proc/<PID>/fd/ | grep socket:
# Куда ведёт конкретный дескриптор (например, 15)
readlink /proc/<PID>/fd/15
Практический пример: Допустим, Nginx не отвечает. Я нахожу его PID (pgrep nginx или systemctl status nginx), затем выполняю sudo ss -tulnp | grep nginx, чтобы убедиться, что он слушает ожидаемые порты (80, 443) и нет ли тысяч «висящих» соединений в состоянии CLOSE_WAIT.