Pid для новой нити

У меня есть быстрый вопрос о новом потоке, созданном pthread_create():

Когда я печатаю pid (get from getpid()) основного потока и дочерний поток, они одинаковы, когда я использую утилиту htop linux для отображения pid, они разные. Кто-нибудь может мне это объяснить?? Спасибо!!

[email protected]:~/LPI$ ./pthr_create
--------------------------------------
main thread: pid: 4845, ppid: 3335
child thread: pid: 4845, ppid: 3335

htop показывает: Screenshot of the htop application showing a list of processes.

Ответы

Ответ 1

Linux реализует pthreads() как Light-Weight-Processes, поэтому они получают назначенный PID.

Дополнительную информацию можно найти на http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/

также есть пример, как получить LWP-Pid для вашего потока.

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

int main()
{
     pthread_t tid = pthread_self();
     int sid = syscall(SYS_gettid);
     printf("LWP id is %d\n", sid);
     printf("POSIX thread id is %d\n", tid);
     return 0;
}

Ответ 2

В потоках есть идентификатор процесса, возвращаемый из сценария getpid(), и идентификатор потока, возвращаемый gettid(). Для потока, выполняемого в main(), они будут идентичными. Я не знаю, с какой стороны сообщают htop, вы должны проверить документы.