getpid()在进程的每个线程中返回不同的值吗?

ren*_*ack 0 c pthreads

在Pthreads手册页中,提到了

调用getpid(2)在每个线程中返回不同的值

在LinuxThreads部分中。

我创建了两个线程,并在其中打印了PID。但是,两者的PID都是相同的。

int main () 
{
    //pid_t pid;
    pthread_t tid[2];
    {
        printf("In main, PID : %d, PPID : %d\n", getpid(), getppid());
        pthread_create(&(tid[0]), NULL, &(f),NULL);
        pthread_create(&(tid[1]), NULL, &(g),NULL);
        pthread_join(tid[0], NULL);
        pthread_join(tid[1], NULL);
    }
    return 0;
}

void *g()
{
    printf("My PID in G : %d, PPID : %d\n", getpid(), getppid());
}

void* f()
{
    printf("My PID in F : %d, PPID : %d\n", getpid(), getppid());
}
Run Code Online (Sandbox Code Playgroud)

以下是我得到的输出,

总的来说,PID:5219,PPID:5214
我的PID在F中:5219,PPID:5214
我的PID在G中:5219,PPID:5214

我需要知道我是否在这里误解了什么。

snr*_*snr 6

提及解释说:

LinuxThreads实现以多种方式偏离POSIX.1规范,包括以下几种:

调用getpid(2)在每个线程中返回不同的值。

但是您很有可能POSIX Threads不使用The LinuxThreads。在POSIX中,线程属于一个进程,每个线程都具有PID