Para persistir um namespace, crie um ponto de montagem de ligação em qual /proc/PID?

Para persistir um namespace, crie um ponto de montagem de ligação em qual /proc/PID?

Dehttps://man7.org/linux/man-pages/man1/n.1.html:

Por padrão, um novo namespace permanece existindo apenas enquanto tiver pelo menos um processo membro. Um namespace pode se tornar persistente - isto é, fixado na existência mesmo quando não possui processos membros - montando por ligação o arquivo do tipo /proc/PID/ns/ns correspondente.

Qual PID está sendo usado no caminho do arquivo da fonte de montagem de ligação? O objetivo de um ponto de montagem de ligação ao criar namespaces não é que o namespace não dependa da existência de um PID?

Se eu criar um namespace de rede usando clone()o CLONE_NEWNETsinalizador e, em seguida, criar uma montagem de ligação usando o PID do novo processo que foi criado e, em seguida, matar o novo processo, pensaria que o /proc/PID/ns/netarquivo desapareceria, mas também /var/run/netns/<netns name>seria excluído e o namespace da rede não persistiria.

Responder1

O software Userland, executado em processos, não pode criar namespace fora de qualquer processo.

Portanto, você usa o PID do processo de criação do namespace (ou um de seus filhos).

Se eu criar um namespace de rede com clone() usando o sinalizador CLONE_NEWNET e, em seguida, criar uma montagem de ligação usando o PID do novo processo que foi criado e, em seguida, encerrar o novo processo, pensaria que o /proc/PID/ns/ arquivo net desaparece,

Vamos usar "arquivo" entre aspas grandes aqui. A entrada do sistema de arquivos virtual desaparece, mas ...

mas então o /var/run/netns/ também seria excluído

"excluir" é algo que você faz com arquivos reais e não se aplica aqui. O PID desapareceria, mas coisas que você poderia acessar como alguma entrada do sistema de arquivos virtual em um caminho que contém esse PID se tornariam inacessíveisquecaminho. Mas:

mas então /var/run/netns/ também seria excluído e o namespace da rede não persistiria.

está errado, porque a montagem de ligação adicionaria uma referência interna do kernel ao namespace, para que ele não deixasse de ser utilizado e, portanto, persistisse.

informação relacionada