Linux x86_64Namespaces#272
unshare
Desassocia partes do contexto de execução da thread chamadora, movendo-a para novos namespaces.
Descrição
Cria novas cópias (não compartilhadas com o processo pai) de um ou mais tipos de namespace — mount, UTS, IPC, rede, PID, usuário, cgroup — para a thread chamadora, sem precisar criar um processo filho como `clone` faria. É a base de ferramentas de containerização como `unshare(1)` e parte da implementação de runtimes de container.
Header:
sched.hman 2Desde o kernel 2.6.16Nota
CLONE_NEWPID afeta apenas os filhos criados depois da chamada — a própria thread chamadora não muda de namespace de PID.
Nota
CLONE_NEWUSER sem privilégio é o mecanismo central por trás de containers/sandboxes 'rootless'.
Assinatura
int unshare(int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| flags | int | Máscara de bits com os namespaces a desassociar: CLONE_NEWNS, CLONE_NEWCGROUP, CLONE_NEWUTS, CLONE_NEWIPC, CLONE_NEWUSER, CLONE_NEWPID, CLONE_NEWNET, entre outros CLONE_* relacionados a namespaces. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | flagsint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- ENOSPC(28)
- Sem espaço livre no dispositivo.
- EUSERS(87)
- Excesso de usuários.