Como wikipedia diz,
Under Unix, process IDs are usually allocated on a sequential basis, beginning at 0 and rising to a maximum value which varies from system to system. Once this limit is reached, allocation restarts at zero and again increases. However, for this and subsequent passes any PIDs still assigned to processes are skipped.
Portanto, é realmente uma política muito simples para "geração", apenas incrementar um contador e "reciclar", apenas envolver o número em um valor máximo e continuar incrementando até encontrar um número atribuído a um processo que tenha terminou e 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 .