Possibilidade de reutilização do PID no Linux

2

Em um sistema operacional Linux, existe alguma chance de um PID ser reutilizado?

Por exemplo, um PID é chamado de 2252. Esse PID é inativo e apagado da tabela de processos do kernel. Existe alguma chance de que a tabela de processos possa reutilizar um mesmo PID para um novo processo, ou ele não será usado em nenhum dos processos futuros?

    
por Athiri 05.01.2018 / 12:35

1 resposta

7

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.

    
por 05.01.2018 / 13:05