Как получить pid из pthread - PullRequest
       4

Как получить pid из pthread

11 голосов
/ 01 сентября 2011

в RH Linux каждый pthread сопоставляется с pid, который можно отслеживать с помощью таких инструментов, как htop.но как я могу получить pid потока?getpid () просто возвращает pid основного потока.

Ответы [ 7 ]

23 голосов
/ 01 сентября 2011

Есть два значения потока, которые запутываются. pthread_self () вернет идентификатор потока POSIX; gettid () вернет идентификатор потока ОС. Последний характерен для Linux и не обязательно будет переносимым, но, вероятно, то, что вы действительно ищете.

РЕДАКТИРОВАНИЕ Как отмечает PlasmaHH, gettid() вызывается через syscall(). Со справочной страницы syscall():

   #define _GNU_SOURCE
   #include <unistd.h>
   #include <sys/syscall.h>
   #include <sys/types.h>

   int
   main(int argc, char *argv[])
   {
       pid_t tid;

       tid = syscall(SYS_gettid);
   }
8 голосов
/ 01 сентября 2011

pthread_self ();

Может быть вызвано для возврата идентификатора вызывающего потока.

Также PID - это идентификатор процесса, у потока есть идентификатор потока, а не PID.Все потоки, работающие в одном и том же процессе, будут иметь одинаковый PID.

2 голосов
/ 01 сентября 2011

PID - это идентификатор процесса, а не идентификатор потока. Все потоки, работающие в одном и том же процессе, очевидно, будут связаны с одним и тем же PID.

Поскольку pthreads пытается быть переносимым, вы не можете получить идентификатор основного потока ОС напрямую. Возможно даже, что нет основного потока ОС.

1 голос
/ 10 сентября 2013

На самом деле pthread_self возвращает pthread_t, а не целочисленный идентификатор потока, с которым вы можете работать, следующая вспомогательная функция обеспечит вам переносимость в различных системах POSIX.

1 голос
/ 22 марта 2013

pthread_self не получает информацию.он предоставляет дескриптор или указатель типа pthread_t для использования в функциях pthread.

посмотрите здесь пример того, что может вернуть реальная программа:

http://www.c -plusplus.de/ форум / 212807-полная

0 голосов
/ 01 сентября 2011

Потоки имеют tids (threadIds), и все потоки выполняются в одном и том же процессе (pid). Итак, все ваши потоки должны иметь один и тот же pid, если они созданы в одном и том же процессе, но они будут иметь разные tid.

pthread_self () дает tid, а getpid () получает pid.

0 голосов
/ 01 сентября 2011

Я думаю, что функция, которую вы ищете: pthread_self

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...