Как получить SPID в Linux 2.6 из C ++ - PullRequest
1 голос
/ 31 марта 2009

У меня есть вопрос: есть ли какой-нибудь путь к SPID в linux 2.6 из приложения C ++? Когда я делаю "ps -amT", я вижу потоки в процессе:

root@10.67.100.2:~# ps -amT
  PID  SPID TTY          TIME CMD
 1120     - pts/1    00:00:20 sncmdd
    -  1120 -        00:00:00 -
    -  1125 -        00:00:00 -
    -  1126 -        00:00:00 -
    -  1128 -        00:00:00 -
    -  1129 -        00:00:09 -
    -  1130 -        00:00:00 -
    -  1131 -        00:00:09 -
 1122     - pts/1    00:00:00 snstatusdemuxd
    -  1122 -        00:00:00 -
    -  1127 -        00:00:00 -
    -  1132 -        00:00:00 -
    -  1133 -        00:00:00 -

И тогда в файловой системе я вижу темы:

root@10.67.100.2:~# ls /proc/1120/task/
1120  1125  1126  1128  1129  1130  1131

Так есть ли способ получить SPID из моего приложения, чтобы я мог как-то определить, какой у меня SPID в каждом запущенном потоке?

Спасибо!

/ Mike

Редактировать: я должен добавить, что PID, возвращаемый из getpid (), одинаков в каждом потоке.

Когда я добавляю этот код в мои темы:

// Log thread information to syslog
syslog(LOG_NOTICE, "ibnhwsuperv: gettid()= %ld,  pthread_self()=%ld", (long int)syscall(224), pthread_self());

Я получаю этот результат:

Jan  1 01:24:13 10 ibnhwsupervd[1303]: ibnhwsuperv: gettid()= -1,  pthread_self()=839027488

Ни один из них не похож на SPID, заданный ps или в файловой системе proc.

Также обратите внимание, что gettid не возвращает SPID .

1 Ответ

5 голосов
/ 31 марта 2009

Как насчет gettid () ?

Редактировать: если ваш libc не имеет функции gettid (), вы должны запустить его так:

#include <sys/syscall.h>
syscall(SYS_gettid);

... или см. пример на этой странице руководства .

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