Почему top и ps показывают разные PID для одних и тех же процессов?

11

Когда я запускаю top -H, я вижу, что все мои mysqlпотоки имеют одинаковый PID. Тем не менее, ps -eLfя вижу, что каждый из них имеет разные PID:

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

И в 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

Что происходит и кому я должен верить?

Мадан Рам
источник
Где вопрос?
Винз

Ответы:

10

На самом деле они показывают одну и ту же информацию по-разному. Это то , что -fи -Lварианты psсделать (с man ps, курсив):

-f Сделать полный формат списка. Эта опция может быть объединена со многими другими опциями в стиле UNIX для добавления дополнительных столбцов. Это также приводит к выводу аргументов команды. При использовании с -L будут добавлены столбцы NLWP (количество потоков) и LWP (идентификатор потока).

-L Показать темы, возможно, со столбцами LWP и NLWP.

tid TID уникальный номер, представляющий разборчивый объект (псевдоним lwp, spid). Это значение также может отображаться как: идентификатор процесса (pid); идентификатор группы процессов (pgrp); идентификатор сеанса для лидера сеанса (sid); идентификатор группы потоков для лидера группы потоков (tgid); и tty ID группы процессов для лидера группы процессов (tpgid).


Таким образом, psпокажет идентификаторы потоков в LWPстолбце, в то время как PIDстолбец является фактическим идентификатором процесса .

topс другой стороны, перечисляет различные темы в PIDстолбце, хотя я не могу найти явного упоминания об этом в man top.

Тердон
источник
2

Это просто разница в представлении. Посмотрите на LWPколонку на вашем psвыходе - LWPэто LIGHT Wвосемь Process. Ядро может различать полный процесс и поток, но оно все равно должно планировать их независимо (что является целью потока) с тем же механизмом, который он использует для планирования процессов, и поэтому идентификаторы, которые видит планировщик, должны быть уникальными, Лучше всего это достигается за счет использования единого пула идентификаторов процессов и потоков для каждой цели и использования других способов разделения двух видов.

jthill
источник
-2

Вы видите родительский процесс 1424, процесс, который создал один или несколько дочерних процессов ( the other PIDs).

Alex
источник
1
Это не дочерние процессы, это потоки ядра одного и того же процесса.
Жиль "ТАК - перестань быть злым"