В современных системах Linux (2.6) каждый поток имеет отдельный идентификатор, который обрабатывается почти так же, как и pid. Он отображается в таблице процессов (по крайней мере, в программе htop ), а также имеет отдельную запись /proc
, т.е. /proc/<tid>/stat
.
Отметьте man 5 proc
и обратите особое внимание на stat
, statm
, status
и т. Д. Там вы найдете интересующую вас информацию.
Единственным препятствием является получение этого потока идентификатора. Это отличается с идентификатором процесса ! То есть getpid()
вызовы во всех потоках возвращают одно и то же значение. Чтобы получить фактический идентификатор потока, вы должны использовать (в рамках программы на C):
pid_t tid = syscall(SYS_gettid);
Между прочим, виртуальная машина java (по крайней мере, ее реализация OpenJDK Linux) делает это внутренне и использует ее для целей отладки в своей внутренней части, но не предоставляет ее интерфейсу java.