【问题标题】:Does `getpid()` return different values in each thread of a process?`getpid()` 是否在进程的每个线程中返回不同的值?
【发布时间】:2019-09-02 10:13:51
【问题描述】:

在 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());
}

下面是我得到的输出,

在主中,PID:5219,PPID:5214
我在 F 中的 PID:5219,PPID:5214
我在 G 中的 PID : 5219, PPID : 5214

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

【问题讨论】:

    标签: c pthreads


    【解决方案1】:

    有一个解释说,

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 2014-08-23
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-10
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多