동일한 프로세스의 top과 ps가 다른 PID를 표시하는 이유는 무엇입니까?

동일한 프로세스의 top과 ps가 다른 PID를 표시하는 이유는 무엇입니까?

을 실행하면 여러 스레드가 모두 동일한 PID를 가지고 있는 top -H것을 볼 수 있습니다 . mysql그러나 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

무슨 일이 일어났고, 어느 것을 믿어야 합니까?

답변1

그들은 실제로 동일한 정보를 다른 방식으로 표시합니다. 이것이 -f-L옵션이 수행하는 작업입니다 ps( man ps, 강조 내 항목).

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

-L은 스레드를 보여줍니다.LWP 및 NLWP 컬럼과 함께 사용할 수 있습니다.

tid TID는 예약 가능한 엔터티(별칭 lwp, spid)의 고유 번호를 나타냅니다. 이 값은 프로세스 ID(pid), 프로세스 그룹 ID(pgrp), 스레드 그룹 리더의 스레드 그룹 ID(tgid), 프로세스 그룹 리더의 tty 프로세스 그룹 ID( tpgid).


따라서 스레드 ID는 실제 항목인 열에 ps표시됩니다.LWPPID프로세스 식별자.

top반면에 PID이 열에는 다른 스레드가 나열되어 있지만 에서 이에 대한 명시적인 언급을 찾을 수는 없습니다 man top.

답변2

단지 프레젠테이션의 차이일 뿐입니다. 출력 LWP의 열을 ps보면 LWP8개의 프로세스가 있습니다 L. 커널은 전체 프로세스와 스레드를 구별할 수 있지만 여전히 프로세스를 예약하는 것과 동일한 메커니즘(스레드의 목적)을 사용하여 독립적으로 예약해야 하므로 스케줄러가 보는 ID는 고유해야 하며 가장 좋은 방법은 이는 목적별로 하나의 프로세스와 스레드 ID 풀을 사용하고 다른 방법을 사용하여 두 유형을 구별하는 것입니다.WP

답변3

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

관련 정보