답변:
이 문서는 매우 혼란 스러울 수 있으므로 " 실제 "Linux 모델은 다음과 같습니다.
getpid()프로세스에서 호출 하면 TGID (= "메인 스레드"PID)가 반환됩니다.gettid()모든 프로세스에서 호출 하면 PID (!)가 반환됩니다.clone(2)시스템 호출로 모든 종류의 프로세스를 만들 수 있습니다 .ls /proc같이 나열 할 수있는 폴더의 숫자 이름/proc/NUMBER/proc/TGID/task같이 폴더의 숫자 이름/proc/TGID/task/NUMBERls /proc수는 없지만 여전히 할 수 있습니다 cd /proc/any_PID.결론 : 커널 관점에서 볼 때 각각 고유 한 PID를 갖는 프로세스 만 존재하며 소위 스레드는 다른 종류의 프로세스입니다.
참고 : Linux에서 "스레드"개념을 구현하면 어휘 혼동이 생겼으며, getpid() 거짓말을 하면 생각하지 않는 경우 동작이 POSIX 호환성을 따릅니다 (스레드는 공통 PID를 공유해야 함) .
스레드는 Linux에서 프로세스입니다. clone시스템 호출 로 생성되며, 프로세스 kill와 마찬가지로 시스템 호출을 통해 신호를 보낼 수있는 프로세스 ID를 반환합니다 . 스레드 프로세스는 ps출력 에서 볼 수 있습니다 . clone호출 스레드 프로세스를 공유하는 방법을 부모 프로세스의 환경의 많은 결정 플래그를 전달됩니다.
pthreads(7)현재 NPTL (Native POSIX Threads Library) 구현에서 "프로세스의 모든 스레드는 동일한 스레드 그룹에 배치되고 스레드 그룹의 모든 구성원은 동일한 PID를 공유합니다"라고 말합니다. 사용되지 않는 LinuxThreads 구현에서 각 "스레드"에는 자체 PID가 있습니다.