誰がファイル記述子を開きましたか? (ソケット)

誰がファイル記述子を開きましたか? (ソケット)

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

最初の7つは読み取りに使用されるファイル記述子です(参照:ここ)。

そのソケットを誰が開いたのかわかりますか?プロセスが開かれたファイルのリストを/ procに保存することを知っています(私の考えでは?)。それでは、そのfdなどを開いたすべてのプロセスのリストにありますか?

ありがとう

ベストアンサー1

誰がソケットを開いたかわかりませんが、プログラムは他のプログラムでファイルを開くことができません。したがって、ソケットは、追跡中のプロセス(または後で分岐した親プロセスの1つ)によって開かれたか、すでに開かれていました。プログラムを呼び出すとき(プログラムが使用するソケットの場合は可能性が低い)

したがって、ファイルディスクリプタ7を開くシステムコールが見つかるまで、トレースを詳しく見てください。ソケットの場合は、次のようになります。connectプロセスがクライアントの場合acceptサーバーなら。呼び出しは、ファイル記述子をランダムに調整する呼び出しでもあります。dup2、この場合、重複記述子を追跡する必要があります。

ソケットが通信している他のプロセスを知りたい場合は、次を参照してください。このUnixソケットペアの反対側の端を持っている人はいますか?

おすすめ記事