Как просмотреть идентификатор потока процесса, который открыл подключение к сокету?

У меня есть процесс, где несколько потоков открывают несколько сокетов. Я хочу просмотреть эту информацию и отобразить, какой поток открыл какой порт сокета. lsof -i а также netstat Команда дает идентификатор процесса, но не может отобразить идентификатор потока. Есть ли команда, которая печатает эту информацию?

2 ответа

Решение

Как предложил MarkR, вам нужно использовать strace при запуске:

strace -fp <pid>

Приведенная выше команда покажет вам системные вызовы, такие как open(), read(), recv() и т. Д., А также используемые дескрипторы:

[pid 428] close(36) 

После того как вы изолировали нить, вы можете присоединиться к процессу и узнать точную нить с помощью

gdb attach <pid>

Или, если в вашем процессе установлены имена потоков, используйте

ps -eL

чтобы узнать дружественное имя потока.

Если только вы не выполняете процесс (), нет.

Когда файловый дескриптор открыт, он "в равной степени" принадлежит всем потокам в процессе (насколько это касается ядра), вы не можете видеть, какой поток открыл его.

Другие вопросы по тегам