Na API C, as chamadas do sistema retornam um valor negativo para indicar um erro, e o código de erro em errno
fornece mais informações sobre a natureza do erro. Sua página man deve explicar os possíveis erros no seu sistema. Existem dois códigos de erro padrão :
-
EAGAIN
indica que o novo processo não pode ser criado devido à falta de recursos disponíveis, memória insuficiente de algum tipo ou um limite que foi atingido, como o número máximo de processos por usuário ou no geral. -
ENOMEM
indica que o novo processo não pode ser criado devido à falta de memória de algum tipo. No Linux,ENOMEM
indica falta de memória do kernel, enquanto a falta de memória do usuário é reportada comoEAGAIN
. No OpenBSD,ENOMEM
é usado também para a falta de memória do usuário.
Em resumo, fork
pode falhar devido à falta de recursos disponíveis (possivelmente na forma de um limite artificial em vez de uma simples falta de memória).
O comportamento de shells quando fork
falha não é especificado por POSIX. Na prática, eles tendem a retornar diferentes estados de erro (1 em pdksh, 2 em cinza, 254 em bash, 258 em ksh93, 1 em tcsh; zsh retorna 0 que é um bug). Se você estiver implementando um shell para uso em produção (em oposição a um exercício de aprendizado), talvez valha a pena discutir isso no Grupo de Austin