Чтобы сохранить пространство имен, создайте точку монтирования привязки, на которой /proc/PID?

Чтобы сохранить пространство имен, создайте точку монтирования привязки, на которой /proc/PID?

Отhttps://man7.org/linux/man-pages/man1/n.1.html:

По умолчанию новое пространство имен существует только до тех пор, пока у него есть хотя бы один процесс-участник. Пространство имен можно сделать постоянным — то есть, закрепленным в существовании, даже если у него нет процессов-участников — с помощью привязки монтирования соответствующего файла /proc/PID/ns/ns-type.

Какой PID используется в пути файла источника монтирования привязки? Разве весь смысл точки монтирования привязки при создании пространств имен не в том, что пространство имен не полагается на существование PID?

Если я создам сетевое пространство имен с clone()использованием CLONE_NEWNETфлага, а затем создам привязку монтирования с использованием PID нового созданного процесса, а затем убью новый процесс, я бы подумал, что файл /proc/PID/ns/netисчезнет, ​​но тогда он /var/run/netns/<netns name>также будет удален, и сетевое пространство имен не сохранится.

решение1

Программное обеспечение пользовательского пространства, работающее в процессах, не может создавать пространства имен вне какого-либо процесса.

Следовательно, вы используете PID процесса, создающего пространство имен (или одного из его дочерних процессов).

Если я создам сетевое пространство имен с помощью clone(), используя флаг CLONE_NEWNET, а затем создам привязку монтирования, используя PID нового созданного процесса, а затем убью новый процесс, я бы подумал, что файл /proc/PID/ns/net исчезнет,

Давайте возьмем здесь "файл" с большими кавычками. Виртуальная запись файловой системы исчезает, но ...

но тогда /var/run/netns/ также будет удален

"delete" - это то, что вы делаете с реальными файлами, и это не применимо здесь. PID исчезнет, ​​но то, к чему вы могли бы получить доступ как к некоторой записи виртуальной файловой системы по пути, содержащему этот PID, станет недоступнымчтопуть. Но:

но тогда /var/run/netns/ также будет удален, и сетевое пространство имен не сохранится.

неверно, поскольку монтирование привязки добавит внутреннюю ссылку ядра в пространство имен, так что оно не станет неиспользуемым и, таким образом, сохранится.

Связанный контент