Claro. Caso contrário, um sistema só poderia executar 32768 processos (ou qualquer que seja o número máximo de pid no sistema) por inicialização.
Contanto que um processo esteja inativo e tenha sido aguardado (por seu pai, ou o sub-filho secundário ou init, se o pai estiver morto), seu pid pode ser reutilizado.
Você vê scripts fazendo coisas como:
cmd1 & pid1=$!
something else
cmd2 & pid2=$!
more things
kill "$pid1" "$pid2"
Essas são aproximações, pois a linguagem shell (a maioria das shells) não oferece uma API melhor para lidar com processos filhos.
Não há garantia de que $pid1
e / ou $pid2
ainda se refiram aos processos iniciados anteriormente, se esses processos tiverem morrido. $pid1
e $pid2
também podem ser os mesmos (se cmd1
tiver morrido quando cmd2
for iniciado). Então kill
poderia matar os processos errados.
Na prática, raramente é um problema, especialmente em sistemas onde os pids são atribuídos em seqüência, já que leva algum tempo para que os números de pidifiquem. Mas isso pode acontecer quando a tabela pid fica cheia (como quando está cheia de processos zumbis) e alguns atacantes podem tirar proveito disso.