web-dev-qa-db-ja.com

シンボリックリンクが壊れているソケットを(/ proc / pid // fdの下に)見つけるのはなぜですか

Close()の後でfdが消えると予想されるため、それらが閉じているとは思わないが、壊れているシンボリックリンクを含む、残存しているfd-> socket [xxxxx]エントリがたくさんあるようです。すぐに消えます。この状態の原因は何ですか?

4
Gregg Leventhal

Socket [xxxxx]シンボリックリンクは常に壊れています。特定のiノード番号でソケットを開くために提供できるパスはありません。

試してみましたが、ファイルを開けないようです/proc/pidX/fd/Yはソケットを指します。ただし、ファイルが削除されていても、それが実際のファイルを参照している場合は可能です。正確にはシンボリックリンクではありません。それは魔法です(つまり、特別な場合)。

3
sourcejedi

シンボリックリンク先のテキストはファイルを参照していませんが、エンコードされたテキストフィールドを使用して各ソケットを説明する/proc/net/tcpテーブルのエントリを参照しています。たとえば、私のシステムでは、次のように表示されます。

$ ls -l /proc/24724/fd/7
lrwx------ 1 vagrant vagrant 64 Feb 13 15:08 /proc/24724/fd/7 -> socket:[19164451]

これは、tcpテーブルのこの行に対応します。

$ grep 19164451 /proc/net/tcp
 433: 0100007F:C8AA 0100007F:0C8A 01 00000000:00000000 02:00000286 00000000  1000        0 19164451 2 0000000000000000 20 4 1 10 27

いくつかのクイックGoogle検索は、これらの行をデコードするための多数のリソースを見つけるのに役立ちます。 2つの例:

http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.htmlhttps://stackoverflow.com/questions/5992211/list- of-possible-internal-socket-statuses-from-proc

代わりにそれらを処理するツールが必要な場合、-pオプションを使用して/procnetstatをすべて読み取るように指示すると、fdがそれを実行しますどのプロセスがどのソケットに属しているかを知るためのリンク。試してみてください:

netstat -tuapn
2
Brandon Rhodes