/proc/pid//fd 아래에서 소켓의 심볼릭 링크가 끊어진 것을 발견한 이유는 무엇입니까?

/proc/pid//fd 아래에서 소켓의 심볼릭 링크가 끊어진 것을 발견한 이유는 무엇입니까?

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소켓을 참조하는 파일을 열 수 없는 것 같습니다. 그러나 실제 파일을 참조하는 경우 해당 파일이 삭제된 경우에도 이 작업을 수행할 수 있습니다. 엄밀히 말하면 심볼릭 링크는 아닙니다. 그것은 마술적입니다. 즉, 특별한 상황입니다.

관련 정보