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

무슨 일이 있고 어떤 것을 믿어야합니까?


질문은 어디에 있습니까?
Vinz

답변:


10

그들은 실제로 같은 정보를 다른 방식으로 보여주고 있습니다. 이것이 할 일 -f-L옵션 ps(에서 man ps, 강조 광산) :

-f 전체 형식 목록을 작성합니다. 이 옵션은 다른 많은 UNIX 스타일 옵션과 결합하여 열을 추가 할 수 있습니다. 또한 명령 인수가 인쇄됩니다. -L과 함께 사용하면 NLWP (스레드 수) 및 LWP (스레드 ID) 열이 추가됩니다.

-L LWP 및 NLWP 열이있는 스레드를 표시합니다 .

tid TPA는 dispatacable 엔티티 (별칭 lwp, spid)를 나타내는 고유 번호입니다. 이 값은 프로세스 ID (pid); 프로세스 그룹 ID (pgrp); 세션 리더 (sid)의 세션 ID; 스레드 그룹 리더 (tgid)의 스레드 그룹 ID; 및 프로세스 그룹 리더 (tpgid)에 대한 tty 프로세스 그룹 ID.


따라서 열이 실제 프로세스 식별자 인 동안 열에 ps스레드 ID가 표시됩니다 .LWPPID

top다른 한편으로는 PID열 에서 다른 스레드를 나열 하지만에 대한 명시 적 언급을 찾을 수는 없습니다 man top.


2

프레젠테이션의 차이점 일뿐입니다. 상기 봐 LWP온 열 ps출력은 - LWP이다 Light WP로웠. 커널은 전체 프로세스와 스레드를 구별 할 수 있지만 프로세스를 예약하는 데 사용하는 것과 동일한 메커니즘을 사용하여 스레드의 목적인 스레드를 독립적으로 예약해야하므로 스케줄러가 보는 ID는 고유해야합니다. 모든 목적을 위해 단일 프로세스 풀과 스레드 ID를 보유하고 다른 방법으로 두 종류를 구별함으로써 가장 잘 달성됩니다.


-2

1424하나 이상의 하위 프로세스 ( the other PIDs)를 생성 한 프로세스 인 상위 프로세스가 표시 됩니다.


1
그것들은 자식 프로세스가 아니며 같은 프로세스의 커널 스레드입니다.
Gilles 'SO- 악한 중지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.