Réponses:
Non, pour la raison très simple qu'il existe une valeur numérique maximale que le PID peut avoir. Si un processus a le PID le plus élevé, aucun enfant qu'il forche ne peut avoir un PID supérieur. L'alternative à donner à l'enfant un PID inférieur serait d'échouer fork()
complètement, ce qui ne serait pas très productif.
Les PID sont alloués dans l'ordre, et après que le plus élevé soit utilisé, le système se contente de réutiliser les PID inférieurs (gratuits), de sorte que vous pouvez également obtenir des PID inférieurs pour un enfant dans d'autres cas.
Le PID maximum par défaut sur mon système ( /proc/sys/kernel/pid_max
) n'est que de 32 768, il n'est donc pas difficile d'atteindre la condition dans laquelle le bouclage se produit.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Si votre système devait allouer des PID de manière aléatoire ( comme OpenBSD semble le faire ) plutôt que consécutivement (comme Linux), il y aurait deux options. Soit le choix aléatoire a été fait sur tout l'espace des PID possibles, auquel cas il serait évident que le PID d'un enfant peut être inférieur à celui du parent. Ou, le PID de l'enfant serait choisi au hasard parmi les valeurs supérieures au PID du parent, ce qui le mettrait en moyenne à mi-chemin entre le PID du parent et le maximum. Les processus bifurquant récursivement atteindraient alors rapidement le maximum et nous serions au même point que mentionné ci-dessus: un nouveau fork devrait utiliser un PID inférieur pour réussir.
Il existe également un risque de vulnérabilités de sécurité en utilisant les notifications du noyau et en vous forçant à éviter d'être détecté par une analyse de la table des processus; si cela est fait correctement, votre processus aura un PID inférieur et les outils de processus ne verront pas le processus en question.
http://cve.circl.lu/cve/CVE-2018-1121
procps-ng, procps est vulnérable à un processus se cachant par condition de concurrence. Étant donné que proc_pid_readdir () du noyau renvoie les entrées PID dans un ordre numérique croissant, un processus occupant un PID élevé peut utiliser des événements inotify pour déterminer quand la liste des processus est analysée, et fork / exec pour obtenir un PID inférieur, évitant ainsi l'énumération. Un attaquant non privilégié peut masquer un processus aux utilitaires de procps-ng en exploitant une condition de concurrence critique dans la lecture des entrées / proc / PID. Cette vulnérabilité affecte procps et procps-ng jusqu'à la version 3.3.15, les versions plus récentes peuvent également être affectées.