ps
이 플래그가 있는 명령은 -T
TID(스레드 ID)라고도 알려진 SPID 열을 출력합니다. 그러면 SPID는 무엇을 의미합니까?
소스 코드는 ps
이름이 다음과 같은 이유를 모르는 것 같습니다.
trace("-T adds strange SPID column (old sproc() threads?)\n");
https://gitlab.com/procps-ng/procps/-/blob/newlib/src/ps/parser.c#L320
답변1
인용하다sproc
이는 SPID가 "공유 그룹 프로세스 ID"와 같은 것을 참조할 수 있음을 나타내는 IRIX(Linux의 스레드와 유사)에 새로운 "공유 그룹" 프로세스를 생성합니다.
말씀하신 대로 실제로 Linux의 스레드 ID는 ps
SPID 열에 표시됩니다.즉커널 관점에서 본 프로세스 ID( ps
PID 열에 표시된 프로세스 ID는 커널 관점에서 본 프로세스 그룹 ID입니다). 이는 이 옵션을 사용하여 LWP 열에 표시되는 정보와 동일합니다 -L
. 이것이 실제로 IRIX 동작인지 여부는 확실하지 않습니다.IRIX ps
매뉴얼 페이지-T
옵션을 다음과 같이 기록하는 SPID 열에 대한 언급은 없습니다.
개별 커널 스레드에 대한 데이터를 나열합니다. 일반적으로 제공되는 정보는 프로세스의 모든 스레드의 합계입니다. 이는 POSIX 스레드 프로세스를 검사할 때 유용합니다.
답변2
procps의 SPID는 ps
TID 또는 스레드 ID를 표시합니다. 프로세스 또는 스레드 프로세스 ID를 표시하는 PID 및 TGID 열과 대조됩니다.
프로세스는 동일한 프로세스 ID와 스레드 ID를 갖습니다. 프로세스의 모든 스레드도 프로세스 ID를 공유하지만 스레드 ID는 다릅니다.
$ ps -L -o pid,tgid,tid,spid,cmd 232810
PID TGID TID SPID CMD
232810 232810 232810 232810 /usr/libexec/gnome-terminal-server
232810 232810 232811 232811 /usr/libexec/gnome-terminal-server
232810 232810 232813 232813 /usr/libexec/gnome-terminal-server
232810 232810 232814 232814 /usr/libexec/gnome-terminal-server
메인 프로세스 232810과 3개의 스레드 232811, 232813, 232814가 있습니다.
tid 및 spid는 별칭이며 둘 다 동일한 함수를 호출하여 동일한 값을 인쇄합니다. 차이점은 SPID는 SGI 운영 체제에서 나오는 반면 TID는 AIX에서 나온다는 것입니다.