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 :
-
EAGAINindica 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. -
ENOMEMindica que o novo processo não pode ser criado devido à falta de memória de algum tipo. No Linux,ENOMEMindica 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