Как просмотреть идентификатор потока процесса, который открыл подключение к сокету? - PullRequest
8 голосов
/ 18 мая 2011

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

Ответы [ 2 ]

12 голосов
/ 18 мая 2011

Если вы не используете strace (), нет.

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

1 голос
/ 10 мая 2018

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

strace -fp <pid>

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

[pid 428] close(36) 

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

gdb attach <pid>

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

ps -eL

чтобы узнать понятное имя темы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...