Digamos, a partir do kernel 2.6 em diante.
Eu assisto todos os processos em execução no sistema.
O IDP dos filhos é sempre maior que o ID dos pais?
É possível ter casos especiais de "inversão"?
fonte
Digamos, a partir do kernel 2.6 em diante.
Eu assisto todos os processos em execução no sistema.
O IDP dos filhos é sempre maior que o ID dos pais?
É possível ter casos especiais de "inversão"?
Não, pela simples razão de que existe um valor numérico máximo que o PID pode ter. Se um processo tiver o PID mais alto, nenhum filho que ele bifurque poderá ter um PID maior. A alternativa para dar à criança um IDP menor seria falhar fork()
completamente, o que não seria muito produtivo.
Os PIDs são alocados em ordem e, depois que o mais alto é usado, o sistema se reutiliza para reutilizar os mais baixos (gratuitos), para que você possa obter PIDs mais baixos para uma criança em outros casos também.
O PID máximo padrão no meu sistema ( /proc/sys/kernel/pid_max
) é apenas 32768, portanto, não é difícil alcançar a condição em que a envolvente acontece.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Se seu sistema alocasse PIDs aleatoriamente ( como o OpenBSD parece fazer ) em vez de consecutivamente (como o Linux), haveria duas opções. A escolha aleatória foi feita em todo o espaço de possíveis IDPs, caso em que seria óbvio que a ID da criança pode ser menor que a dos pais. Ou, o PID da criança seria escolhido aleatoriamente entre os valores maiores que o PID do pai, o que, em média, o colocaria no meio do caminho entre o PID do pai e o máximo. Os processos de bifurcação recursiva alcançariam rapidamente o máximo e estaríamos no mesmo ponto mencionado acima: uma nova bifurcação precisaria usar um PID mais baixo para ter sucesso.
Também existe o potencial de vulnerabilidades de segurança usando notificações do kernel e se bifurcando para evitar a detecção por uma verificação da tabela de processos; isso se feito corretamente resulta em um processo com um PID mais baixo e ferramentas de processo que não veem o processo em questão.
http://cve.circl.lu/cve/CVE-2018-1121
fonte