Disons, à partir du noyau 2.6.
Je regarde tous les processus en cours d'exécution sur le système.
Le PID des enfants est-il toujours supérieur au PID de leurs parents?
Est-il possible d'avoir des cas particuliers "d'inversion"?
la source
Disons, à partir du noyau 2.6.
Je regarde tous les processus en cours d'exécution sur le système.
Le PID des enfants est-il toujours supérieur au PID de leurs parents?
Est-il possible d'avoir des cas particuliers "d'inversion"?
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
la source