Por que top e ps mostram PIDs diferentes para os mesmos processos?

11

Quando executo top -H, vejo que meus vários mysqlthreads têm o mesmo PID. No entanto, ps -eLfvejo que cada um tem um PID diferente:

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 em 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

O que está acontecendo e em que devo acreditar?

Madan Ram
fonte
Onde esta a pergunta?
Vinz #

Respostas:

10

Na verdade, eles estão mostrando as mesmas informações de maneiras diferentes. Isto é o que as opções -fe o -Lque psfazer (de man ps, ênfase minha):

-f Faça a listagem em formato completo. Esta opção pode ser combinada com muitas outras opções no estilo UNIX para adicionar colunas adicionais. Também faz com que os argumentos do comando sejam impressos. Quando usado com -L, as colunas NLWP (número de threads) e LWP (ID do thread) serão adicionadas.

-L Mostra threads, possivelmente com colunas LWP e NLWP.

tid TID o número único que representa uma entidade não disponível (alias lwp, spid). Este valor também pode aparecer como: um ID do processo (pid); um ID do grupo de processos (pgrp); um ID de sessão para o líder da sessão (sid); um ID do grupo de encadeamentos para o líder do grupo de encadeamentos (tgid); e um ID do grupo de processos tty para o líder do grupo de processos (tpgid).


Portanto, psmostrará os IDs de encadeamento na LWPcoluna enquanto a PIDcoluna é o identificador de processo real .

toppor outro lado, lista os diferentes threads na PIDcoluna, embora eu não consiga encontrar uma menção explícita disso em man top.

terdon
fonte
2

É apenas uma diferença na apresentação. Olhe para a LWPcoluna em sua pssaída - LWPé Light Woito Process. O kernel pode distinguir entre um processo completo e um encadeamento, mas ainda precisa agendá-los de forma independente (esse é o objetivo de um encadeamento) com o mesmo mecanismo usado para agendar processos e, portanto, os IDs que o agendador vê devem ser exclusivos, melhor alcançado com um único pool de IDs de processos e threads para todos os fins e usando outras maneiras de diferenciar os dois tipos.

jthill
fonte
-2

Você vê o processo pai 1424, um processo que criou um ou mais processos filhos ( the other PIDs).

Alex
fonte
1
Eles não são processos filhos, são threads de kernel do mesmo processo.
Gilles 'SO- stop be evil'