谁打开了文件描述符? (插座)

谁打开了文件描述符? (插座)

我用来strace跟踪一个程序。在这一行中:

recvfrom(7, "\0\260R\0\0\1\364\6\215\r\257\330\210\341\0\270\240\0\260R\0\0\0\0\0\0\0\0\0\0\0\0"..., 3000, 0, {sa_family=AF_PACKET, proto=0x88e1, if4, pkttype=PACKET_OUTGOING, addr(6)={1, f4068d0dafd8}, [18]) = 60

前七个是用于读取的文件描述符(见这里)。

我能发现谁打开了那个套接字吗?我知道进程保存在 /proc (我认为?)它们的打开文件列表中。那么,我可以在所有进程的列表中找到谁打开了该 fd 或类似的东西吗?

谢谢

答案1

您无法发现谁打开了套接字,但程序无法打开另一个程序中的文件,因此套接字要么是由您正在跟踪的进程(或后来分叉的祖先之一)打开的,要么已经打开当您调用该程序时(如果这是程序使用的套接字,则不太可能)。

因此,进一步查找跟踪,直到找到导致文件描述符 7 打开的系统调用。对于套接字,这可能是connect如果该进程是客户端或accept如果它是一个服务器。该调用也可以是随机调整文件描述符的调用,例如dup2,在这种情况下,您将需要跟踪重复的描述符。

如果您想知道套接字正在与哪个其他进程通信,请参阅谁有这个 unix 套接字对的另一端?

相关内容