~에서https://man7.org/linux/man-pages/man1/n.1.html:
기본적으로 새 네임스페이스는 멤버 프로세스가 하나 이상 있는 경우에만 존재합니다. 해당 /proc/PID/ns/ns 유형의 파일을 바인딩하여 설치하면 네임스페이스를 영속화할 수 있습니다. 즉, 멤버 프로세스가 없어도 영구적으로 존재할 수 있습니다.
바인드 설치 소스의 파일 경로에는 어떤 PID가 사용되나요? 네임스페이스가 PID의 존재에 의존하지 않도록 네임스페이스를 생성할 때 마운트 지점을 바인딩하는 것이 요점이 아닙니까?
clone()
해당 플래그를 사용하여 네트워크 네임스페이스를 생성 한 CLONE_NEWNET
다음 생성된 새 프로세스의 PID로 바인드 마운트를 생성한 다음 해당 새 프로세스를 종료하면 파일이 사라진 것으로 생각 /proc/PID/ns/net
하지만 파일 /var/run/netns/<netns name>
도 삭제됩니다. 네트워크 네임스페이스는 지속되지 않습니다.
답변1
프로세스에서 실행되는 사용자 모드 소프트웨어는 프로세스 외부에 네임스페이스를 만들 수 없습니다.
따라서 네임스페이스를 사용하여 프로세스(또는 해당 하위 프로세스 중 하나)의 PID를 생성할 수 있습니다.
CLONE_NEWNET 플래그와 함께 clone()을 사용하여 네트워크 네임스페이스를 생성한 다음 생성된 새 프로세스의 PID로 바인드 마운트를 생성한 다음 새 프로세스를 종료하면 /proc/PID/ns/ .net을 찾을 수 있습니다. 파일이 사라지고,
여기서는 큰 따옴표가 있는 "파일"을 사용하겠습니다. 가상파일시스템 항목이 사라졌지만..
하지만 /var/run/netns/도 삭제됩니다.
"삭제"는 실제 파일에 수행하는 작업이며 여기에는 적용되지 않습니다. PID는 사라지지만 PID가 포함된 경로 아래의 일부 가상 파일 시스템 항목으로 액세스할 수 있는 항목은 액세스할 수 없게 됩니다.저것방법. 하지만:
그러나 /var/run/netns/도 삭제되고 네트워크 네임스페이스는 유지되지 않습니다.
바인드 마운트가 네임스페이스에 커널 내부 참조를 추가하여 네임스페이스가 사용되지 않고 지속되도록 하기 때문에 잘못된 것입니다.