/proc/net/tcp дает мне локальный адрес, порт и номер inode для сокета (например, 0.0.0.0:5432 и 9289).
Я хотел бы найти PID для конкретного процесса, учитывая приведенную выше информацию.
Можно открыть каждую пронумерованную папку в /proc, а затем проверить символические ссылки на соответствие номеров сокетов/инодов с помощью команды оболочки, например «$ sudo ls -l /proc/*/fd/ 2>/dev/null | grep socket». Однако это кажется более затратным в вычислительном отношении, чем необходимо, поскольку ‹5% процессов в любой данной системе имеют открытые сокеты TCP.
Каков наиболее эффективный способ найти PID, который открыл данный сокет? Я бы предпочел использовать стандартные библиотеки, и в настоящее время я разрабатываю Python 3.2.3.
Изменить: образцы кода удалены из вопроса, поскольку теперь они включены в ответ ниже.
strace lsof -n -i
. Я не понимаю, почему запуск подпроцесса - это так плохо? Это путь Unix. :) - person emil   schedule 03.02.2013