Linux x86_64Processos & threads#435
clone3
Versão moderna e extensível de clone, usando uma struct versionada em vez de uma longa lista de argumentos posicionais.
Descrição
Resolve a limitação de `clone`, cuja lista de argumentos já estava esgotada para novas funcionalidades. `clone3` também pode retornar diretamente um pidfd do novo processo (via CLONE_PIDFD), evitando uma chamada `pidfd_open` separada logo em seguida.
Header:
linux/sched.hman 2Desde o kernel 5.3Assinatura
long clone3(struct clone_args * cl_args, size_t size);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| cl_args | struct clone_args * | Estrutura versionada com flags, pilha, TLS, e (opcionalmente) pidfd de saída, entre outros campos. |
| size | size_t | Tamanho de `cl_args`, para extensibilidade futura da struct. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | cl_argsstruct clone_args * |
| rsi | argumento 2 | sizesize_t |
Valor de retorno
No processo pai, o PID (ou pidfd) do filho; 0 no processo filho, em sucesso. -1 no pai em erro, com errno definido.
Códigos de erro (errno)
- E2BIG(7)
- Lista de argumentos grande demais.
- 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).