Wenn ich laufe top -H
, sehe ich, dass meine mehreren mysql
Threads alle dieselbe PID haben. ps -eLf
Ich 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?
process-management
multithreading
pid
Madan Ram
quelle
quelle
Antworten:
Sie zeigen tatsächlich die gleichen Informationen auf unterschiedliche Weise. Dies ist, was die
-f
und-L
Optionen zups
tun (vonman ps
, Betonung meiner):Zeigt also
ps
Thread-IDs in derLWP
Spalte an, während diePID
Spalte die eigentliche Prozesskennung ist .top
Auf der anderen Seite werden die verschiedenen Threads in derPID
Spalte aufgelistet, obwohl ich dies in nicht explizit erwähnen kannman top
.quelle
Es ist nur ein Unterschied in der Präsentation. Schauen Sie sich die
LWP
Spalte auf Ihrerps
Ausgabe -LWP
istL
ightW
achtP
rocess. 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.quelle
Sie sehen den übergeordneten Prozess
1424
, einen Prozess, der einen oder mehrere untergeordnete Prozesse erstellt hat (the other PIDs
).quelle