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, вы должны проверить документы.