O POSIX não especifica que o PID de cada novo processo seja obtido incrementando o PID anterior. Requer apenas que seja único.
Em um sistema em que os PIDs são incrementados em cada um deles fork()
, observei que os valores retornam após atingir um limite superior (que na minha experiência é de cerca de 2 15 ). Depois de entender, os novos PIDs não são estritamente incrementados, pois alguns valores de PID ainda serão utilizados nos ciclos anteriores.
Não deve haver problema até que você tenha 2 N executando processos simultaneamente . Suspeito que o sistema tenha algum limite de capacidade muito antes disso. Nesse caso, a fork()
chamada do sistema falharia e provavelmente configurada errno
como EAGAIN
ou ENOMEM
( man fork
para detalhes).
O código implementado fork
pode ou não verificar se existem PIDs disponíveis. Pode não incomodar, porque pressupõe que os recursos do sistema acabariam antes de chegar a esse ponto, ou pode ter uma verificação explícita por uma questão de integridade e para lidar com possibilidades futuras. Eu não verifiquei, e se eu tivesse, poderia apenas resolver o kernel que eu tinha examinado.