Как просмотреть идентификатор потока процесса, который открыл подключение к сокету?
У меня есть процесс, где несколько потоков открывают несколько сокетов. Я хочу просмотреть эту информацию и отобразить, какой поток открыл какой порт сокета. lsof -i
а также netstat
Команда дает идентификатор процесса, но не может отобразить идентификатор потока. Есть ли команда, которая печатает эту информацию?
2 ответа
Как предложил MarkR, вам нужно использовать strace при запуске:
strace -fp <pid>
Приведенная выше команда покажет вам системные вызовы, такие как open(), read(), recv() и т. Д., А также используемые дескрипторы:
[pid 428] close(36)
После того как вы изолировали нить, вы можете присоединиться к процессу и узнать точную нить с помощью
gdb attach <pid>
Или, если в вашем процессе установлены имена потоков, используйте
ps -eL
чтобы узнать дружественное имя потока.
Если только вы не выполняете процесс (), нет.
Когда файловый дескриптор открыт, он "в равной степени" принадлежит всем потокам в процессе (насколько это касается ядра), вы не можете видеть, какой поток открыл его.