Voltar à lista
Linux x86_64Processos & threads#58

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.

Header: unistd.hman 2

Atençã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)

RegistradorPapelArgumento
raxnú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.

Relacionadas