Чому 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 ідентифікатор групи процесів для лідера групи процесів (tpgid).


Таким чином, psбуде показувати ідентифікатори потоків в LWPстовпці , а PIDстовпець є фактичним ідентифікатором процесу .

topз іншого боку, перераховує різні потоки в PIDстовпці, хоча я не можу знайти явної згадки про це в man top.


2

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.