답변:
이 문서는 매우 혼란 스러울 수 있으므로 " 실제 "Linux 모델은 다음과 같습니다.
getpid()
프로세스에서 호출 하면 TGID (= "메인 스레드"PID)가 반환됩니다.gettid()
모든 프로세스에서 호출 하면 PID (!)가 반환됩니다.clone(2)
시스템 호출로 모든 종류의 프로세스를 만들 수 있습니다 .ls /proc
같이 나열 할 수있는 폴더의 숫자 이름/proc/NUMBER
/proc/TGID/task
같이 폴더의 숫자 이름/proc/TGID/task/NUMBER
ls /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가 있습니다.