Voltar à lista
Linux x86_64Processos & threads#57

fork

Cria uma cópia do processo chamador como um novo processo filho.

Descrição

O filho recebe uma cópia (copy-on-write, portanto barata até que haja escrita) do espaço de memória, mas descritores de arquivo, IDs de processo e a maior parte do estado do kernel são tratados separadamente conforme a semântica POSIX. É a base histórica de criação de processos no Unix — em Linux é implementada como uma chamada a `clone` com um conjunto padrão de flags.

Header: unistd.hman 2

Atenção

Em processos multi-thread, apenas a thread chamadora é duplicada no filho — as demais threads simplesmente deixam de existir nele, o que torna o uso de locks/mutexes ao redor de `fork` uma fonte clássica de deadlock (o filho pode herdar um mutex travado por uma thread que não existe mais nele).

Assinatura

pid_t fork(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.
ENOSYS(38)
Chamada de sistema não implementada nesta versão do kernel.

Relacionadas