을 실행하면 여러 스레드가 모두 동일한 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
표시됩니다.LWP
PID
프로세스 식별자.
top
반면에 PID
이 열에는 다른 스레드가 나열되어 있지만 에서 이에 대한 명시적인 언급을 찾을 수는 없습니다 man top
.
답변2
단지 프레젠테이션의 차이일 뿐입니다. 출력 LWP
의 열을 ps
보면 LWP
8개의 프로세스가 있습니다 L
. 커널은 전체 프로세스와 스레드를 구별할 수 있지만 여전히 프로세스를 예약하는 것과 동일한 메커니즘(스레드의 목적)을 사용하여 독립적으로 예약해야 하므로 스케줄러가 보는 ID는 고유해야 하며 가장 좋은 방법은 이는 목적별로 하나의 프로세스와 스레드 ID 풀을 사용하고 다른 방법을 사용하여 두 유형을 구별하는 것입니다.W
P
답변3
1424
하나 이상의 하위 프로세스( )를 생성한 상위 프로세스가 표시됩니다 the other PIDs
.