pthread에서 프로세스의 갯수가 왜 이렇게 나오는지 궁금합니다.

gugudan의 이미지

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* do_loop(void *data)
{
    int i;

    int me = *((int *)data);
    for (i = 0; i < 10; i++)
    {
        printf("%d - Got %d\n", me, i);
        sleep(1);
    }
}

int main()
{
    int       thr_id;
    pthread_t p_thread;
    int status;
    int a = 1;
    int b = 2;
    int c = 3;

    thr_id = pthread_create(&p_thread, NULL, do_loop, (void *)&a);

    pthread_join(p_thread, (void *) &status);

    printf("programing is end\n");
    return 0;
}

요즘 스레드를 보고 있는데 이 소스를 실행을 하면
프로세스가 3개가 뜹니다.
리눅스 커널 버젼이 낮아서 프로세스가 뜨는건 이해가 가는데
왜 3개가 뜨는거지요?
메인 스레드하고 내가 생성한 스레드..
이렇게 2개가 뜨는게 정상 아닌가요?

pynoos의 이미지

하나는 쓰레드 스케쥴러 입니다.
생성되는 모든 쓰레드는 그 프로세스의 자식으로 되죠.

pthread_create는 실제 쓰레드를 생성하는 것이 아니라 중간에 있는 스케쥴러에게 쓰레드를 생성해달라는 요청만하는 것입니다.