/proc/[pid]/ns/net PID가 [pid]인 프로세스의 네트워크 네임스페이스를 나타내는 inode에 대한 링크가 포함되어 있습니다. 스레드와 비슷한 것이 있습니까?
내 사용 사례는 기본 스레드와 작업자 스레드 집합이 있는 다중 스레드 애플리케이션입니다. 일반 작업자 W는 N을 호출하여 새로운 네트워크 네임스페이스를 생성합니다.공유 취소()(이렇게 하면 W가 N에 들어가게 됩니다.) veth 쌍의 한쪽 끝을 N에 푸시하고 그대로 둡니다(루트 네임스페이스를 가리키는 fd를 사용하여 해당 네임스페이스로 돌아갑니다). W가 루트 네임스페이스로 반환된 후 N에는 프로세스가 없기 때문에 이런 일이 발생하면 N이 삭제되는데, 이는 원하지 않습니다.
제가 생각한 해결책은 파일 시스템 어딘가에 N에 대한 링크를 마운트하는 것이었습니다. iproute2 netns가 수행하는 작업은 다음과 같습니다. /proc/[pid]/ns/net에 대한 링크를 설치합니다. 내 경우 문제는 /proc/[pid]/ns/net이 루트 네임스페이스를 계속 참조하고 W만 네임스페이스를 변경했기 때문에 사용할 수 없었고 네임스페이스 라인을 가리킬 파일/무언가가 필요했다는 것입니다. . 리눅스에 그런게 있나요?
답변1
스레드를 네트워크 네임스페이스와 연결하는 파일이 있습니다.
/proc/[PID]/task/[TID]/ns/net
여기서 TID는 스레드 ID입니다. 이것은 내 문제를 해결했습니다.