pstree 및 htop 프로그램은 고유한 PIDS가 있는 스레드를 표시합니다. 어떻게 이럴 수있어?

pstree 및 htop 프로그램은 고유한 PIDS가 있는 스레드를 표시합니다. 어떻게 이럴 수있어?

pstree -p 31872 프로그램을 실행했고 다음 출력이 인쇄되었습니다.

 ruby(31872)─┬─{ruby}(31906)         
             └─{ruby}(32372)

pstree의 매뉴얼 페이지에는 다음과 같이 나와 있습니다.

프로세스의 하위 스레드는 중괄호 안에 표시된 프로세스 이름을 가진 상위 프로세스 아래에서 발견됩니다.

       icecast2---13*[{icecast2}]

(위의 표시는 압축을 비활성화하는 -p 옵션이 없기 때문에 다릅니다.)

-p 없이 pstree 31872를 실행하면 다음이 제공됩니다.

ruby───2*[{ruby}] 

다음 명령을 사용하여 PIDS를 관찰하려고 하면메모,검색 결과가 없습니다. 그러나 pid는 /proc에 존재합니다.

제 질문은 스레드의 PID가 왜 다른가요?입니다. 나는 그들이 프로세스 (31872)와 동일하기를 원합니다. htop을 실행할 때도 동일한 동작이 관찰됩니다.

답변1

실수는 이 숫자가 실제로는 TIDS(스레드 ID)인데 PIDS라고 가정하는 것입니다. Linux 함수 gettid(2)를 참조하십시오. 많은 추가(그리고 흥미로운) 세부 정보를 보려면 clone(2)을 읽어보세요.

답변2

스레드는 일반적으로 다른 프로세스입니다. 적어도 Linux에서 "스레드"는 일반적으로 상위 프로세스와 일부 메모리를 공유하는 프로세스의 복제본입니다.

그러나 일부 언어에서는 스레드가 언어 VM에서 에뮬레이션되는 "녹색" 스레드이기 때문에 기본 프로세스의 일부로 남아 있습니다. Java와 Python이 이것으로 유명합니다.

관련 정보