Si nous tapons, ps -ef
nous obtenons une liste de processus. Pourquoi les numéros PID ne sont-ils pas continus?
Si nous tapons, ps -ef
nous obtenons une liste de processus. Pourquoi les numéros PID ne sont-ils pas continus?
Réponses:
Sur Ubuntu, ils sont continus. Sur d'autres systèmes d'exploitation, cela peut différer.
Le noyau alloue des PID dans la plage de (RESERVED_PIDS, PID_MAX_DEFAULT). Il le fait de manière séquentielle dans chaque espace de noms (les tâches dans différents espaces de noms peuvent avoir les mêmes ID). Dans le cas où la plage est épuisée, l'affectation pid s'enroule.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Attention cependant ...
Quelques sujets sur stackoverflow:
Dans les commentaires se trouve une commande pour tester l'assignation des PID:
for i in {1..20}; do sh -c 'echo $$'; done
Normalement, le PID est continu mais certains processus seront morts juste au moment où vous exécuterez la commande ps -ef
.
De plus, certains processus peuvent être simplement un sous-processus d'un autre processus qui n'est pas affiché dans la ps -ef
commande. Pour voir un résultat étendu et vous pouvez vérifier le PID continu, utilisez lepstree
pstree -p
Exemple de sortie:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
tandis que si vous exécutez, ps -ef
vous voyez simplement le processus parent.
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
Ils sont continus. Les PID sont attribués dans un ordre séquentiel jusqu'à ce que la limite maximale soit atteinte. Après cette limite, il recommencera à zéro.
Donc, c'est juste que les PID manquants ps -ef
sont des processus morts. Notez que ps -ef
répertorie uniquement les processus en cours d'exécution.