Perché top e ps mostrano PID diversi per gli stessi processi?


11

Quando corro top -H, vedo che i miei mysqlthread multipli hanno tutti lo stesso PID. Tuttavia, ps -eLfvedo che ognuno ha un PID diverso:

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

e dentro 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

Cosa sta succedendo e quale dovrei credere?


Dov'è la domanda?
Vinz,

Risposte:


10

Stanno effettivamente mostrando le stesse informazioni in modi diversi. Questo è ciò che le opzioni -fe -Lda psfare (da man ps, l'enfasi mia):

-f Fai un elenco a tutto formato. Questa opzione può essere combinata con molte altre opzioni in stile UNIX per aggiungere colonne aggiuntive. Inoltre provoca la stampa degli argomenti dei comandi. Se utilizzato con -L, verranno aggiunte le colonne NLWP (numero di thread) e LWP (ID thread).

-L Mostra discussioni, possibilmente con colonne LWP e NLWP.

tid TID il numero univoco che rappresenta un'entità dispacciabile (alias lwp, spid). Questo valore può anche apparire come: un ID processo (pid); un ID gruppo di processi (pgrp); un ID sessione per il leader della sessione (sid); un ID gruppo thread per il leader del gruppo thread (tgid); e un ID gruppo di processi tty per il leader del gruppo di processi (tpgid).


Quindi, psmostrerà gli ID thread nella LWPcolonna mentre la PIDcolonna è l' identificatore del processo effettivo .

topd'altra parte, elenca i diversi thread nella PIDcolonna anche se non riesco a trovare una menzione esplicita di questo in man top.


2

È solo una differenza nella presentazione. Guardate la LWPcolonna sulla vostra psuscita - LWPè Light Wotto PPROCESSO. Il kernel è in grado di distinguere tra un processo completo e un thread, ma deve comunque pianificarli in modo indipendente (che è lo scopo di un thread) con lo stesso meccanismo che utilizza per pianificare i processi e quindi l'id che vede lo scheduler deve essere unico, meglio ottenuto avendo un unico pool di ID processo e thread per ogni scopo e usando altri modi per distinguere i due tipi.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.