Pourquoi top et ps affichent-ils des PID différents pour les mêmes processus?

11

Lorsque je cours top -H, je constate que mes multiples mysqlthreads ont tous le même PID. Cependant, ps -eLfje vois que chacun a un PID différent:

ps -eLf

UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
mysql     1424     1  1424  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1481  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1482  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1483  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1484  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1485  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1486  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1487  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1488  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1489  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1490  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1791  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1792  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1793  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1794  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1809  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld
mysql     1424     1  1812  0   17 18:41 ?        00:00:00 /usr/sbin/mysqld

et en top -H

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
 1424 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.08 mysqld                                                                  
 1481 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1482 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.33 mysqld                                                                  
 1483 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1484 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.23 mysqld                                                                  
 1485 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.27 mysqld                                                                  
 1486 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.15 mysqld                                                                  
 1487 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.18 mysqld                                                                  
 1488 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1489 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.16 mysqld                                                                  
 1490 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.34 mysqld                                                                  
 1791 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.26 mysqld                                                                  
 1792 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.54 mysqld                                                                  
 1793 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1794 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1809 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.00 mysqld                                                                  
 1812 mysql     20   0  539m  56m 7200 S   0.0  1.5   0:00.13 mysqld

Que se passe-t-il et lequel dois-je croire?

Madan Ram
la source
Où est la question?
Vinz

Réponses:

10

Ils affichent en fait les mêmes informations de différentes manières. Voici ce que le -fet les -Loptions à psfaire (à partir de man ps, je souligne):

-f Faire une liste au format complet. Cette option peut être combinée avec de nombreuses autres options de style UNIX pour ajouter des colonnes supplémentaires. Il provoque également l'impression des arguments de commande. Lorsqu'il est utilisé avec -L, les colonnes NLWP (nombre de threads) et LWP (ID de thread) seront ajoutées.

-L Affiche les threads, éventuellement avec des colonnes LWP et NLWP.

tid TID le numéro unique représentant une entité distribuable (alias lwp, spid). Cette valeur peut également apparaître comme: un ID de processus (pid); un identifiant de groupe de processus (pgrp); un identifiant de session pour le chef de session (Sid); un ID de groupe de threads pour le leader du groupe de threads (tgid); et un ID de groupe de processus tty pour le chef de groupe de processus (tpgid).


Ainsi, psaffichera les ID de threads dans la LWPcolonne tandis que la PIDcolonne est l' identificateur de processus réel .

topd'autre part, répertorie les différents threads dans la PIDcolonne bien que je ne puisse pas trouver une mention explicite de cela dans man top.

terdon
la source
2

C'est juste une différence de présentation. Regardez la LWPcolonne de votre pssortie - LWPest Light Whuit Process. Le noyau peut faire la distinction entre un processus complet et un thread, mais il doit toujours les planifier indépendamment (c'est le but d'un thread) avec le même mécanisme qu'il utilise pour planifier les processus et donc les identifiants que le planificateur voit doivent être uniques, Le meilleur résultat est d'avoir un pool unique de processus et d'ID de threads pour chaque objectif et d'utiliser d'autres façons de distinguer les deux types.

jthill
la source
-2

Vous voyez le processus parent 1424, un processus qui a créé un ou plusieurs processus enfants ( the other PIDs).

Alex
la source
1
Ce ne sont pas des processus enfants, ce sont des fils du noyau du même processus.
Gilles 'SO- arrête d'être méchant'