Warum zeigen top und ps unterschiedliche PIDs für dieselben Prozesse?

11

Wenn ich laufe top -H, sehe ich, dass meine mehreren mysqlThreads alle dieselbe PID haben. ps -eLfIch sehe jedoch, dass jeder eine andere PID hat:

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

und in 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

Was ist los und welchem ​​soll ich glauben?

Madan Ram
quelle
Wo ist die frage
Vinz

Antworten:

10

Sie zeigen tatsächlich die gleichen Informationen auf unterschiedliche Weise. Dies ist, was die -fund -LOptionen zu pstun (von man ps, Betonung meiner):

-f Vollformatige Auflistung. Diese Option kann mit vielen anderen UNIX-Optionen kombiniert werden, um zusätzliche Spalten hinzuzufügen. Außerdem werden die Befehlsargumente gedruckt. Bei Verwendung mit -L werden die Spalten NLWP (Anzahl der Threads) und LWP (Thread-ID) hinzugefügt.

-L Threads anzeigen , möglicherweise mit LWP- und NLWP-Spalten.

tid TID die eindeutige Nummer, die eine dispatacable Entität darstellt (Alias ​​lwp, spid). Dieser Wert kann auch wie folgt aussehen: eine Prozess-ID (pid); eine Prozessgruppen-ID (pgrp); eine Sitzungs-ID für den Sitzungsleiter (sid); eine Thread-Gruppen-ID für den Thread-Gruppenleiter (tgid); und eine tty-Prozessgruppen-ID für den Prozessgruppenleiter (tpgid).


Zeigt also psThread-IDs in der LWPSpalte an, während die PIDSpalte die eigentliche Prozesskennung ist .

topAuf der anderen Seite werden die verschiedenen Threads in der PIDSpalte aufgelistet, obwohl ich dies in nicht explizit erwähnen kann man top.

terdon
quelle
2

Es ist nur ein Unterschied in der Präsentation. Schauen Sie sich die LWPSpalte auf Ihrer psAusgabe - LWPist Light Wacht Process. Der Kernel kann zwischen einem vollständigen Prozess und einem Thread unterscheiden, muss sie jedoch unabhängig voneinander (dies ist der Zweck eines Threads) mit demselben Mechanismus planen, den er zum Planen von Prozessen verwendet. Daher müssen die IDs, die der Scheduler sieht, eindeutig sein. Am besten erreichen Sie, indem Sie für jeden Zweck einen einzigen Pool von Prozess- und Thread-IDs haben und die beiden Arten auf andere Weise voneinander unterscheiden.

jthill
quelle
-2

Sie sehen den übergeordneten Prozess 1424, einen Prozess, der einen oder mehrere untergeordnete Prozesse erstellt hat ( the other PIDs).

Alex
quelle
1
Sie sind keine untergeordneten Prozesse, sondern Kernel-Threads desselben Prozesses.
Gilles 'SO - hör auf böse zu sein'