vfork
Como fork, mas o processo pai fica suspenso e o filho compartilha o espaço de endereçamento do pai até chamar execve ou _exit.
Descrição
Otimização histórica para o padrão comum 'fork seguido imediatamente de exec': evita copiar (mesmo que copy-on-write) as tabelas de página do processo pai, já que o filho normalmente as descartaria de qualquer forma ao executar um novo programa.
unistd.hman 2Atenção
Como o filho compartilha memória (inclusive a pilha) com o pai suspenso, o filho só pode chamar um conjunto muito restrito de funções seguras antes de exec/_exit — qualquer escrita descuidada pode corromper o estado do processo pai.
Nota
Na prática, `posix_spawn(3)` costuma ser preferível a usar `vfork` diretamente.
Assinatura
pid_t vfork(void);Parâmetros
Esta função não recebe parâmetros.
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
Valor de retorno
PID do filho no processo pai; 0 no processo filho, em sucesso. -1 no pai em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- ENOMEM(12)
- Memória insuficiente para completar a operação.