如何查看已打开套接字连接的进程的线程ID?

kum*_*mar 8 sockets linux multithreading

我有一个进程,其中多个线程打开多个套接字连接.我想查看此信息并映射哪个线程已打开哪个套接字端口. lsof -inetstatcommand给出进程ID,但无法显示线程ID.是否有打印此信息的命令?

Mar*_*rkR 12

除非你把这个过程分开,否则不行.

一旦文件描述符打开,它就"同时"属于进程中的所有线程(就内核而言),你无法看到哪个线程打开它.


Ale*_*x C 4

正如 MarkR 所建议的,您需要从启动时使用strace

strace -fp <pid>
Run Code Online (Sandbox Code Playgroud)

上面的命令将显示每个线程的系统调用,如 open()、read()、recv() 等,以及使用的描述符:

[pid 428] close(36) 
Run Code Online (Sandbox Code Playgroud)

隔离线程后,您可以附加到进程并使用以下命令找出确切的线程

gdb attach <pid>
Run Code Online (Sandbox Code Playgroud)

或者,如果您在进程中设置了线程名称,请使用

ps -eL
Run Code Online (Sandbox Code Playgroud)

找出线程的友好名称。