Como a wikipedia diz,
No Unix, os IDs de processo geralmente são alocados sequencialmente, começando em 0 e aumentando para um valor máximo que varia de sistema para sistema. Quando esse limite é atingido, a alocação é reiniciada em zero e aumenta novamente. No entanto, para isso e passes subsequentes, quaisquer PIDs ainda atribuídos aos processos são ignorados.
portanto, é realmente uma política muito simples para "geração", basta incrementar um contador e "reciclar", basta agrupar o número no valor máximo e continuar incrementando até encontrar um número que foi atribuído a um processo que terminou e tem foi removido da tabela de processos.
Algumas implementações do Unix, como o AIX, usam uma política menos simples, consulte, por exemplo, esta FAQ .