close() 후에 fd가 사라질 것으로 예상했기 때문에 닫히지 않은 것 같지만, 깨진 심볼릭 링크가 있는 fd -> 소켓[xxxxx] 항목이 많이 남아 있어 더 빠르지 않은 것 같습니다. 이 상태의 원인은 무엇입니까?
답변1
기호 링크 대상의 텍스트는 파일을 참조하지 않고 /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 검색을 통해 이러한 줄을 해독하는 데 필요한 많은 리소스를 찾을 수 있습니다. 두 가지 예:
http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html https://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc
이를 처리하는 도구를 원하는 경우, 어떤 프로세스가 어떤 소켓에 속하는지 알기 위해 모든 링크를 읽도록 지시하는 옵션을 사용하면 netstat
그렇게 할 수 있습니다 . 노력하다:-p
/proc
fd
netstat -tuapn
답변2
소켓[xxxxx] 심볼릭 링크는 항상 끊어집니다. 주어진 inode 번호로 소켓을 열 수 있는 접근 가능한 경로가 없습니다.
시도해 보았는데 /proc/pidX/fd/Y
소켓을 참조하는 파일을 열 수 없는 것 같습니다. 그러나 실제 파일을 참조하는 경우 해당 파일이 삭제된 경우에도 이 작업을 수행할 수 있습니다. 엄밀히 말하면 심볼릭 링크는 아닙니다. 그것은 마술적입니다. 즉, 특별한 상황입니다.