Respostas:
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
procps-ng, procps é vulnerável a um processo oculto pela condição de corrida. Como proc_pid_readdir () do kernel retorna entradas PID em ordem numérica crescente, um processo que ocupa um PID alto pode usar eventos inotify para determinar quando a lista de processos está sendo varrida, e fork / exec para obter um PID mais baixo, evitando assim a enumeração. Um invasor sem privilégios pode ocultar um processo dos utilitários do procps-ng, explorando uma condição de corrida nas entradas de leitura / proc / PID. Essa vulnerabilidade afeta os processos e processos até a versão 3.3.15. As versões mais recentes também podem ser afetadas.